2016-06-20 10 views
0

私は自分のアプリケーションにリストビューを持っています。各行にはボタンがあります。私はsetVisibilityでいくつかの行のボタンを隠しています。しかし、リストのスクロール後にボタンの可視性が変わります。どうすればこの変更を止めることができますか?リストビュースクロールの変更ボタンの表示?

私はすでにリストビューのチェックボックスで質問を見ました。しかし、私はボタンのためにそれを実装する方法を知らない。だから私を案内してください!

アダプタ

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

のようなあなたのコードを更新@Solhailが提案ようsetVisibility(View.INVISIBLE)を追加したりしてandroid:visibility="invisible"を追加してassignment_adapter_layout.xmlで、デフォルトではこれらのボタンを非表示ボタンのプロパティを変更して、現在のアダプタコード内のものを変更しないでください。

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; 
} } 
関連する問題