2016-06-20 126 views
0

我在我的应用程序中有一个listview。每一行都有一个按钮。我隐藏了一些与setVisibility行的按钮。但滚动列表后按钮的可见性会发生变化。我怎样才能阻止这种变化?Listview滚动更改按钮可见性?

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

ADAPTER

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; 
    } 
} 
+0

你在哪里隐藏按钮,有你张贴,没有代码? –

+0

我们应该假设你隐藏了assign_adapter_layout.xml中的按钮? –

回答

0

更新你这样的代码

 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"); 
     } 
0

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

0

在你的情况下,当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; 
} }