2013-08-18 145 views
3

當使用listView時,我注意到,在listView中設置checkBox時,偵聽器不起作用!目前,我正在嘗試爲listView實施兩種不同的on click listeners。第一個是爲listView正文和第二個爲listView的正文的複選框。 listView的主體是(現在)生成一個toast,而checkBox將生成另一個toast(現在)。listView項監聽器

我面臨的問題是,當提到checkBox.onClick 邏輯僅實現到佈局中的最後(或任意隨機,但只有一個)複選框。

ListView的佈局是這樣的:

enter image description here

MainActivity.java

private void registerClickCallBack() { 
     // TODO Auto-generated method stub 
     ListView list = (ListView)findViewById(R.id.listViewComplex); 
     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View viewClicked, int position, 
        long id) { 
       // TODO Auto-generated method stub 

       Random clickedRandom = randomList.get(position); 
       String message = "You have clicked position "+position+" which is titled "+clickedRandom.getTitle(); 
       Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show(); 
       final CheckBox check= (CheckBox)findViewById(R.id.checkBoxComplex); 
       check.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 
         if(check.isChecked()){ 
         Toast.makeText(MainActivity.this, "Checked", Toast.LENGTH_LONG).show(); 
         } 
        } 
       }); 
      } 
     }); 
    } 



} 
+0

我仍然不確定你需要什麼以及你想要做什麼。我想你需要顯示一個敬酒,當你檢查複選框因爲這是你在下面的評論中說。如果是這樣,嘗試下面。 – Raghunandan

回答

3

添加此

android:focusable="false" 

在XML中複選框。

假設您希望點擊複選框來顯示吐司。試試以下

您應該使用視圖保持器進行平滑滾動和性能。

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

onCreate初始化您listiew。從編輯之前的代碼我可以看到你初始化listview兩次。沒有必要。

更改您活動

public class MainActivity extends Activity { 
    private List<Random> randomList = new ArrayList<Random>(); 
    ListView list; 
    ArrayAdapter<Random> adapter; 
    private SparseBooleanArray mCheckStates; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     list = (ListView)findViewById(R.id.listViewComplex); 
     adapter = new MyListAdapter(); 
     populateRandomList(); 
     populateListView(); 
     registerClickCallBack(); 
    } 

    private void populateRandomList() { 
     // TODO Auto-generated method stub 
     randomList.add(new Random("Title One", "Simple", "Status: OK", R.drawable.ic_launcher)); 
     randomList.add(new Random("Title Two", "Complex", "Status: WORKING", R.drawable.ic_launcher)); 
     randomList.add(new Random("Title Three", "Moderate", "Status: NOT OK", R.drawable.ic_launcher)); 
     randomList.add(new Random("Title Four", "Simple", "Status: BAD", R.drawable.ic_launcher)); 
     randomList.add(new Random("Title Five", "Moderate", "Status: NOT OK", R.drawable.ic_launcher)); 
     randomList.add(new Random("Title Six", "Simple", "Status: WORKING",R.drawable.ic_launcher)); 
     randomList.add(new Random("Title Seven", "Complex", "Status: EXCELLENT", R.drawable.ic_launcher)); 
     randomList.add(new Random("Title Eight", "Complex", "Status: NBA", R.drawable.ic_launcher)); 
    } 

    private void populateListView() { 
     list.setAdapter(adapter); 
    } 

    private class MyListAdapter extends ArrayAdapter<Random> implements CompoundButton.OnCheckedChangeListener{ 

     public MyListAdapter(){ 
      super(MainActivity.this,R.layout.layout_complex,randomList); 
      mCheckStates = new SparseBooleanArray(randomList.size()); 
     } 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return randomList.size(); 
     } 

     public View getView(int position, View convertView, ViewGroup parent){ 
      ViewHolder vh; 
      if(convertView == null){ 
       convertView = getLayoutInflater().inflate(R.layout.layout_complex,parent,false); 
       vh = new ViewHolder(); 
       vh.imageView = (ImageView)convertView.findViewById(R.id.itemImage); 
       vh.titleText = (TextView)convertView.findViewById(R.id.itemTitle); 
       vh.typeText = (TextView)convertView.findViewById(R.id.itemType); 
       vh.statusText = (TextView)convertView.findViewById(R.id.itemStatus); 
       vh.cb = (CheckBox) convertView.findViewById(R.id.checkBoxComplex); 
       convertView.setTag(vh); 
     } else { 
      vh = (ViewHolder) convertView.getTag(); 
     } 

      Random currentItem = randomList.get(position); 
      vh.imageView.setImageResource(currentItem.getIconID()); 
      vh.titleText.setText(currentItem.getTitle()); 
      vh.typeText.setText(currentItem.getType()); 
      vh.statusText.setText(currentItem.getStatus()); 
      vh.cb.setTag(position); 
      vh.cb.setChecked(mCheckStates.get(position, false)); 
      vh.cb.setOnCheckedChangeListener(this); 
      return convertView; 

     } 
     public boolean isChecked(int position) { 
       return mCheckStates.get(position, false); 
      } 

      public void setChecked(int position, boolean isChecked) { 
       mCheckStates.put(position, isChecked); 

      } 

      public void toggle(int position) { 
       setChecked(position, !isChecked(position)); 

      } 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
       boolean isChecked) { 
      mCheckStates.put((Integer) buttonView.getTag(), isChecked); 
      if(isChecked) 
       { 
       Toast.makeText(MainActivity.this, "Checked at "+(Integer) buttonView.getTag(), Toast.LENGTH_SHORT).show(); 
       } 

     } 
     class ViewHolder 
     { 
      TextView titleText,typeText,statusText; 
      ImageView imageView; 
      CheckBox cb; 
     } 
    } 

    private void registerClickCallBack() { 
     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View viewClicked, int position, 
        long id) { 
       Random clickedRandom = randomList.get(position); 
       String message = "You have clicked position "+position+" which is titled "+clickedRandom.getTitle(); 
       Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show(); 

      } 
     }); 
    } 
} 

快照

enter image description here

+0

+1完成我的回答 –

+0

@Arash謝謝。我不確定我想要什麼,否則我可能會早些發佈解決方案 – Raghunandan

+0

非常感謝。 –