【问题标题】:Setting all elements in a custom adapter listview to Visible/Invisible将自定义适配器列表视图中的所有元素设置为可见/不可见
【发布时间】:2012-09-20 09:46:00
【问题描述】:

我正在尝试让 Button 更改我所有 Listview 元素中单个 ImageButton 的可见性。我遇到的问题是找到要访问的正确元素,因为我没有简单的方法来访问自定义适配器中的特定元素(我认为)

相关代码部分:

 public View getView(final int position, final View convertView, final ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)
    {
        vi = inflater.inflate(R.layout.custom_row_view, null);
    }

/*
 other non important view stuff
*/
if(deleteButton != null){
        deleteButton.setVisibility(View.INVISIBLE);
        deleteButton.setTag(position);
        deleteButton.setOnClickListener(deleteListener);
    }

    return vi;
}

public void setVisibility()
{
    if(deleteButton.getVisibility() == View.INVISIBLE){
        deleteButton.setVisibility(View.VISIBLE); //Here i  want to access all elements
        Log.i("setVisibility", "Changing to "+ deleteButton.getVisibility() + " element: " + deleteButton.getTag()); 
//Logcat output: Changing to 0 element: 2


    } else if(deleteButton.getVisibility() == View.VISIBLE){
        deleteButton.setVisibility(View.INVISIBLE); 
        Log.i("setVisibility", "Changing to "+ deleteButton.getVisibility() + " element: " + deleteButton.getTag());
//Logcat output: Changing to 4 element: 2

    }
}

我在主要活动中使用的东西:

CustomAdapter listAdapter;
ListView listViewLeft;
ListView listViewRight;

OnCreate:
listAdapter=new CustomAdapter(this, link, names, names2, buttonText,context, plistArray); 
listViewLeft.setAdapter(listAdapter);
listViewRight.setAdapter(listAdapter);

我只需使用以下方法调用该方法:

OnClickListener editListener = new OnClickListener() {
    public void onClick(View view) {
        listAdapter.setVisibility();
       }
 }

如果有人有任何想法,我将不胜感激,谢谢:)

【问题讨论】:

    标签: android android-listview visibility custom-adapter


    【解决方案1】:

    您需要在适配器中存储具有不可见按钮或可见性值的项目索引,并在getView() 中使用它(只需为每个视图/convertView 设置可见性)。它与 ListView 端的视图重用有关。
    请参阅 my answer here 了解如何修复它,并参阅 this Romain Guy Google I/O talk 了解更多 ListView 的详细信息

    【讨论】:

      【解决方案2】:

      这是一个非常简单的修复。我忘记打电话了:

      listAdapter.notifiDataSetChanged(); 
      

      但是每次调用那个方法都会调用getView方法,所以我只是在自定义适配器getView中添加了这个

      if(deleteButton != null){
              if(deleteButton.getVisibility() == View.INVISIBLE){
                  deleteButton.setVisibility(View.VISIBLE);
              } else if(deleteButton.getVisibility() == View.VISIBLE){
                  deleteButton.setVisibility(View.INVISIBLE); 
                  }
              deleteButton.setTag(position);
              deleteButton.setOnClickListener(deleteListener);
          }
      

      并将 XML 中的默认设置为可见。 我不确定这是否是最有效的方法,但它至少可以按预期工作:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-13
        相关资源
        最近更新 更多