2011-08-03 2 views
0

Actuellement, j'ai une case à cocher sur ma listview, à partir du BaseAdapter, j'ai défini l'identifiant de la case à cocher avec mon propre identifiant. Lorsque j'accède à cet ID à partir de l'activité. Je reçois une exception de pointeur nul? Bien que je débogue j'ai toujours cette exception de pointeur nul?Cliquez sur le bouton Problème de la case à cocher

N'est-il pas possible de définir manuellement l'identifiant de la case à cocher? La case à cocher a une méthode setId (int id).

Des réflexions sur l'exception de pointeur null sur checkBox.getId()? c'est mon getView() où j'ai défini l'identifiant checkBox.

viewHolder.checkBox.setId(myList.get(position).getId()); 

Sur l'activité que j'ai fait comme ceci parce que je dois supprimer tout CheckBox vérifié.

private void deleteCheckItems() { 
    SparseBooleanArray booleanArray = listView.getCheckedItemPositions(); 
    for (int i = 0; i < listView.getCount(); i++) { 
     if (booleanArray.get(i)) 
      Toast.makeText(getBaseContext(), " the selected index is " + i, Toast.LENGTH_SHORT).show(); 
    } 
} 

Je reçois NullPointerException de cette méthode

Modifié: Mon code source est aussi:

public View getView(int position, View view, ViewGroup parent){ 
    ViewHolder viewHolder; 
    if(view==null){ 
     viewHolder = new ViewHolder(); 
     view = layoutInfalter.inflate(R.layout.item_row,null); 
     viewHolder.checkBox = (CheckBox)view.findViewById(R.id.CheckBoxId); 

     if(VIEW_MODE==-1){ 
      viewHolder.checkBox.setVisibility(View.INVISIBLE); 
     }else{ 
      myAdapter.setViewMode(1); 
      viewHolder.checkBox.setVisibility(View.VISIBLE); 
         viewHolder.checkBox.setId(myList.get(position).getId());  

     } 
     viewHolder.text1= (TextView)view.findViewById(R.id.text1); 
     viewHolder.text2 =TextView)view.findViewById(R.id.text2); 
     view.setTag(viewHolder); 

    }else{ 
     viewHolder = (ViewHolder)view.getTag(); 
    } 
    viewHolder.text1.setText(myList.get(position).getText1()); 
    viewHolder.text2.setText(myList.get(position).getText2()); 
    //viewHolder.checkBox.setId(myList.get(position).getId()); 
    return view; 
} 
+0

pouvez-vous montrer le code complet? –

+0

sont en mesure d'obtenir la ligne no. où l'erreur se produit? –

+0

L'erreur est sur la méthode deleteCheckItem(). Mon toast n'est pas show car il obtient une valeur nulle. – Robin

Répondre

0

cela pourrait vous aider !!

Il fonctionne pour moi:

ROW.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_gravity="center" 
android:background="#ffffff"> 

<RelativeLayout 
android:id="@+id/actionsLayout" 
android:layout_width="wrap_content" 
android:layout_height="fill_parent" 
android:layout_alignParentRight="true" 
android:paddingRight="10dip" 
android:gravity="center" 
android:paddingBottom="10dip"> 

//change it to CheckBox 
    <ImageView 
android:id="@+id/markFav" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:src="@drawable/heart"/> 

</RelativeLayout> 

<RelativeLayout 
android:id="@+id/textLayout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:gravity="center_vertical" 
android:layout_toLeftOf="@+id/actionsLayout" 
android:layout_margin="10dip"> 
<TextView 
android:id="@+id/status" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:lines="4" 
android:gravity="center_vertical" 
android:ellipsize="end" 
android:textColor="#000000" 
android:text="Row Text Here"/> 
</RelativeLayout> 

    </RelativeLayout> 

Dans le changement xml ci-dessus ImageView à CheckBox. et modifier votre getView comme ceci: méthode

GetView dans votre baseAdapter:

public View getView(int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      System.out.println("in getView"); 
      ViewHolder holder; 
      if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.row, null); 
      holder = new ViewHolder(); 
      System.out.println("After holder"); 

      holder.name= (TextView) convertView.findViewById(R.id.status); 

    //Change this to Checkbox and also add that checkbox in your ViewHolder and edit your implementation as per required. 
      holder.heart = (ImageView) convertView.findViewById(R.id.image); 
      //do not set on Click Listener if it is a CheckBox 
      holder.heart.setOnClickListener(this); 


      System.out.println("After holder text"); 
      convertView.setTag(holder); 
      } else { 
      holder = (ViewHolder) convertView.getTag(); 

      System.out.println("in else part"); 
      } 
      //convertView.setBackgroundColor((position & 1) == 1 ? Color.WHITE : Color.LTGRAY); 
      System.out.println("After set background"); 

      if(status.size()>0){ 
       holder.name.setText(status.get(position).desc.toString()); 

      } 
      return convertView; 
     } 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      switch(v.getId()){ 
      case R.id.markFav: 
       System.out.println("**MARK FAV CLICKED"); 
       break; 


      } 
     } 

Dans la méthode getView ci-dessus ne Modifiez la ImageView à case à cocher et renvoyer à l'ID de case correspondante dans votre row.xml Implémentez également votre classe BaseAdapter avec onCLickListener afin que vous puissiez obtenir la méthode onClick dans cette classe d'adaptateur de base.

J'espère que vous obtenez mon point. Pour toute confusion ME .. Demandez

Merci
SHAH

+0

Mon scénario est un peu différent. J'ai peuplé le ListView intially sans une case à cocher, une fois l'édition du menu est tiré ou cliqué, j'ai besoin de remplir la case sur ma liste de sorte qu'en cochant la case je pourrais supprimer ou je peux décocher la case en tirant Annuler le menu. Donc ce que j'ai fait sur ma classe d'adaptateur était comme ci-dessus dans le code de la poste. Je n'ai pas pu supprimer l'élément de liste de cases à cocher qui est sélectionné. Toutes les suggestions seront utiles – Robin

+0

J'ai trouvé une solution que je jouais avec mon code: viewHolder.checkBox.setOnCheckedChangeListener (nouveau OnCheckedChangeListener() { \t \t \t \t \t \t \t \t \t \t @Override \t \t \t \t \t public void onCheckedChanged (CompoundButton buttonView, isChecked Boolean) { \t \t \t \t \t \t si (isChecked) { \t \t \t \t \t \t \t viewHolder.checkBox.setId (myList.get (position) .getId()); \t \t \t \t \t \t \t Toast.makeText (contexte, "Id sélectionné" + viewHolder.checkBox.getId(), Toast.LENGTH_LONG) .show(); \t \t \t \t \t \t} \t \t \t \t \t \t \t \t \t \t \t} \t \t \t \t}); Maintenant, je pense que je devrais créer une liste où je peux stocker mes identifiants. Est-ce bon. – Robin

+0

Oui, votre idée est géniale .. Cela fonctionnerait définitivement. l'avez-vous essayé? – Shah

Questions connexes