【问题标题】:Listview Scrolling changes Button Visibility?Listview 滚动更改按钮可见性?
【发布时间】:2016-06-21 01:52:55
【问题描述】:

我的应用中有一个列表视图。每行都有一个按钮。我用setVisibility 隐藏了一些行的按钮。但是滚动列表后按钮的可见性会发生变化。我怎样才能阻止这种变化?

我已经看到一个带有 Listview 复选框的问题。但我不知道如何为按钮实现它。所以请指导我!

适配器

public class published_adapter extends BaseAdapter {

    Context con;
    ArrayList<HashMap<String, String>> class_list;
    LayoutInflater inflater;

    public class ViewHolder
    {
        TextView title,description,class_section,date;
        ImageButton download;
        Button viewasgn;
    }

    public published_adapter(Context co, ArrayList<HashMap<String, String>> list1) {
        class_list = list1;
        con = co;
        inflater = (LayoutInflater) con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return class_list.size();
    }

    @Override
    public Object getItem(int arg0) {
        return class_list.get(arg0).get("class_name");
    }

    @Override
    public long getItemId(int arg0) {
        return 0;
    }

    @Override
    public View getView(final int arg0, View arg1, ViewGroup arg2) {

        View row = arg1;
        ViewHolder holder = new ViewHolder();

        if(row == null)
        {
            row = inflater.inflate(
                    R.layout.assignment_adapter_layout, arg2, false);

            // initialize the elements
            holder.download = (ImageButton) row.findViewById(R.id.download);
            holder.title = (TextView) row.findViewById(R.id.title);
            holder.description = (TextView) row.findViewById(R.id.description);
            holder.class_section = (TextView) row.findViewById(R.id.class_section);
            holder.date = (TextView) row.findViewById(R.id.date);
            holder.viewasgn = (Button) row.findViewById(R.id.attend);

            row.setTag(holder);
        }
        else
        {
            holder = (ViewHolder)row.getTag();
        }


        String type = class_list.get(arg0).get("ASSIGNMENT_TYPE");


        if (class_list.get(arg0).get("TOTAL_SUBMISSION").equals("0")) {
            Log.e("TITLE", class_list.get(arg0).get("TOTAL_SUBMISSION"));
        }
        else{
            Log.e("TITLE", class_list.get(arg0).get("TOTAL_SUBMISSION"));
            holder.viewasgn.setVisibility(View.VISIBLE);
            holder.viewasgn.setText("VIEW");
        }
        return row;
    }
}

【问题讨论】:

  • 你把按钮藏在哪里了,你贴的没有代码?
  • 我们应该假设您将按钮隐藏在 assignment_adapter_layout.xml 中?

标签: android listview adapter


【解决方案1】:

像这样更新你的代码

     if (class_list.get(arg0).get("TOTAL_SUBMISSION").equals("0")) {
            Log.e("TITLE", class_list.get(arg0).get("TOTAL_SUBMISSION"));
            holder.viewasgn.setVisibility(View.INVISIBLE);
            holder.viewasgn.setText("");
        }
        else{
            Log.e("TITLE", class_list.get(arg0).get("TOTAL_SUBMISSION"));
            holder.viewasgn.setVisibility(View.VISIBLE);
            holder.viewasgn.setText("VIEW");
        }

【讨论】:

    【解决方案2】:

    要么像@Solhail 建议的那样添加setVisibility(View.INVISIBLE),要么在你的按钮属性中添加android:visibility="invisible",在你的assignment_adapter_layout.xml 中默认隐藏这些按钮,并且不要更改当前适配器代码中的任何内容。

    【讨论】:

      【解决方案3】:

      在您的情况下,当 listView 滚动时,视图将被重新创建。 为防止这种情况,您不应使用 ViewHolder。

      您需要像这样使用适配器: (仅当您没有很多元素时)

      public class SampleAdapter  extends BaseAdapter {
      private ArrayList<String> arrayList;
      private Activity activity;
      
      public SampleAdapter(ArrayList<String> arrayList, Activity activity) {
          this.arrayList = arrayList;
          this.activity = activity;
      }
      
      @Override
      public int getCount() {
          return arrayList.size();
      }
      
      @Override
      public Object getItem(int position) {
          return arrayList.get(position);
      }
      
      @Override
      public long getItemId(int position) {
          return position;
      }
      
      
      @Override
      public View getView(final int position, View convertView, ViewGroup parent) {
          LayoutInflater layoutInflater = activity.getLayoutInflater();
          View view = layoutInflater.inflate(R.layout.sample_element, parent, false);
      
          TextView textViewTitle = (TextView) view.findViewById(R.id.text_view_title);
      
          textViewTitle.setText(arrayList.get(position));
      
      
          return view;
      } }
      

      【讨论】:

        猜你喜欢
        • 2012-04-17
        • 1970-01-01
        • 2017-07-25
        • 2019-08-05
        • 1970-01-01
        • 2021-05-09
        • 2015-04-20
        • 2015-12-24
        • 2011-12-20
        相关资源
        最近更新 更多