3

我有自定義適配器填充列表視圖與每個項目上的名稱和複選框。現在,我在列表頂部添加了一個按鈕,可以選擇所有項目,但不知何故,它不起作用,我無法確定我錯在哪裏。它沒有拋出任何錯誤。這是我的代碼。 `選擇所有方法來選擇listview中的所有複選框安卓不工作

send_show12.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View view) { 
    //    flag = !flag; 
        //lv = get 
        int size = lv.getCount(); 
        `Log.d("This is count is at button listener", ""+size); 

        if(lv.isItemChecked(1)){ 
         for(int i = 0; i<=size; i++){ 

          lv.setItemChecked(i, true); 
         } 
        } else { 
         for(int i = 0; i<=size; i++){ 
          lv.setItemChecked(i, false); 
         } 
        } 
       } 
      });` 

幫助讚賞。謝謝

回答

3

滾動時與複選框列表視圖,則項目的位置將發生變化,這樣檢查的項目可以選中和未被檢查的項目可能checked.so,之所以正確,不顯示所選的列表項。(你有沒有觀察到這種問題??) 要解決此問題,您必須使用ArrayAdapter而不是baseAdapter。 Please follow this link to over come the issue.

代替PlanetsActivity類使用這個類剩下的是一樣的...

public class PlanetsActivity extends Activity { 

private ListView mainListView; 
//private Planet[] planets; 
ArrayList<Planet> planets=new ArrayList<Planet>(); 
private ArrayAdapter<Planet> listAdapter; 

/** Called when the activity is first created. */ 
@SuppressWarnings("unchecked") 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Find the ListView resource. 
    mainListView = (ListView) findViewById(R.id.listView1); 

    // When item is tapped, toggle checked properties of CheckBox and 
    // Planet. 

    mainListView 
      .setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View item, 
         int position, long id) { 
        Planet planet = listAdapter.getItem(position); 
        planet.toggleChecked(); 
        PlanetViewHolder viewHolder = (PlanetViewHolder) item 
          .getTag(); 
        viewHolder.getCheckBox().setChecked(planet.isChecked()); 
       } 
      }); 

    Button bt=(Button)findViewById(R.id.yourbutton); 
    bt.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      planets.clear(); 
      for(int i=1;i<15;i++){ 
       planets.add(new Planet(""+i,true)); 
      } 

      listAdapter = new PlanetArrayAdapter(this, planets); 
      mainListView.setAdapter(listAdapter); 
     } 
    }); 

    planets.add(new Planet("1", false)); 
    planets.add(new Planet("2", false)); 
    planets.add(new Planet("3", false)); 
    planets.add(new Planet("4", false)); 
    planets.add(new Planet("5", false)); 
    planets.add(new Planet("6", false)); 
    planets.add(new Planet("7", false)); 
    planets.add(new Planet("8", false)); 
    planets.add(new Planet("9", false)); 
    planets.add(new Planet("10", false)); 
    planets.add(new Planet("11", false)); 
    planets.add(new Planet("12", false)); 
    planets.add(new Planet("13", false)); 
    planets.add(new Planet("14", false)); 


    listAdapter = new PlanetArrayAdapter(this, planets); 
    mainListView.setAdapter(listAdapter); 
} 

public Object onRetainNonConfigurationInstance() { 
    return planets; 
}} 
0

您正試圖檢查代表您的項目的視圖。你說你有一個複選框和一個文本,所以我認爲它是一個LinearLayout。 LinearLayout不實現Checkable,因此您無法檢查它。

你可以實現LiearLayout的一個子類,它實現Checkable(這並不好玩,而且我看到的大多數免費解決方案都是由設計破壞的,或者是不完整的,使得它們在任何情況下都不起作用),或者您可以在循環中的LinearLayout內查找您的CheckBox。

0

我使用HashMap保留所選項目的ID的跟蹤