2011-01-17 10 views
2

リストアビューから各データをリストアアップから取得するリストビューがあります。 リストビューの各アイテムには、テキストビューとトグルボタンが含まれています。 しかし、私はリストをスクロールするときに問題が発生します。チェックされたトグルボタンの状態が変化します。つまり、インデックス4のトグルボタンを選択した場合、スクロールした後、4番目以外のランダムボタンが選択されています。リストビューの切り替えボタンは、Androidの画面をスクロールしたときの状態を緩和します。

答えて

2

行がリサイクルされるため、独自の状態を維持して、ToggleButtonステータスを保存して復元する必要があります。行内にRatingBarを使用することを実証するHere is a sample project;同じ基本プロセスがToggleButtonのために保持されるはずです。

+0

私はToggleButtonでそれをしようとすると、その上のテキストがスクロールしながら上の項目に移動します – Mikey

3

まだ解決策が得られない場合は、このgetviewメソッドを試してください。 // switchState []はブール値の配列です。

public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder = new ViewHolder(); 
     // mSwitchButton = (ToggleButton) findViewById(R.id.switchButton); 
     if(convertView == null) { 
      convertView = mInflator.inflate(R.layout.settings_item_cell, parent, false); 
      holder.categoryName = 
        (TextView) convertView.findViewById(R.id.categoryType); 
      convertView.setTag(holder); 
      holder.switchButton = (ToggleButton) convertView.findViewById(R.id.switchButton); 
     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 


     } 

      holder.switchButton.setOnClickListener(new View.OnClickListener() { 

       public void onClick(View v) { 
        // TODO Auto-generated method stub 

        int index = (Integer) v.getTag(); 
        Log.v("tag of switch============",""+index); 
        if(((ToggleButton) v).isChecked()) { 
         switchState[index] = true; 
         ((ToggleButton) v).setButtonDrawable(R.drawable.item_selected); 

        } 
        else { 
         ((ToggleButton) v).setButtonDrawable(R.drawable.item_deselected); 
         switchState[index] =false; 
        } 
        isToggleButtonClicked = true; 

       } 
      }); 
      if(switchState[position]) 
       holder.switchButton.setButtonDrawable(R.drawable.item_selected); 
      else 
       holder.switchButton.setButtonDrawable(R.drawable.item_deselected); 

     holder.categoryName.setText(categories[position]); 
     holder.switchButton.setTag(new Integer(position)); 

     return convertView; 

    } 
0

私はこれが本当に古いスレッドであることを知っていますが、質問に見つかった回答は本当に素晴らしいものではありませんでした。 2つの答えから実行可能な解決策を得るまでには時間がかかりました。他のノブがスクロール中にどのようにトグルボタンの状態を保持しているかを調べようとしている場合は、作業コードを共有したいだけでした。このコードはコンパイル

private class MyListAdapter extends ArrayAdapter<Product> { 
    boolean [] switchState= new boolean[100] ; 
    public MyListAdapter() { 
     super(ProductSelectActivity.this, R.layout.item_view, myProducts); 
    } 

public View getView(int position, View convertView, ViewGroup parent) { 
     // Make sure we have a view to work with (may have been given null) 

     ViewHolder holder; 

     View itemView = convertView; 
     if (itemView == null) { 
      itemView = getLayoutInflater().inflate(R.layout.item_view, parent, false); 
      View row= itemView; 
      holder= new ViewHolder(row); 
      itemView.setTag(holder); 
      holder.switchButton = (ToggleButton) itemView.findViewById(R.id.favorite_button); 

     } 
     else 
     { 
      holder = (ViewHolder) itemView.getTag(); 

     } 


     holder.switchButton.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       int index = (Integer) v.getTag(); 

       if(((ToggleButton) v).isChecked()) { 
        switchState[index] = true; 
        ((ToggleButton) v).setBackgroundResource(android.R.drawable.btn_star_big_on); 

       } 
       else { 
        ((ToggleButton) v).setBackgroundResource(android.R.drawable.btn_star_big_off); 
        switchState[index] =false; 
       } 

      } 
     }); 
     if(switchState[position]) 
      holder.switchButton.setBackgroundResource(android.R.drawable.btn_star_big_on); 

     else 
      holder.switchButton.setBackgroundResource(android.R.drawable.btn_star_big_off); 

    //holder.categoryName.setText(categories[position]); 
    holder.switchButton.setTag(Integer.valueOf(position)); 

ViewHolder.class

public class ViewHolder { 
ToggleButton switchButton=null; 

    ViewHolder(View base) { 
    this.switchButton=(ToggleButton)base.findViewById(R.id.favorite_button); 
    } 

} 

関連する問題