2012-09-05 6 views
2

J'ai un listview et quand il est cliqué, il doit être invisible. Cela fonctionne parfaitement bien mais quand l'écran défile de haut en bas, ceux qui sont invisibles réapparaissent. Est-ce que quelqu'un sait comment résoudre ces problèmes.masquer les listes après avoir cliqué sur

Voici mes extraits de code pour la ListItemClick

protected void onListItemClick(ListView l, View v, int position, long id) { 
      super.onListItemClick(l, v, position, id); 
      v.setVisibility(View.GONE); 

       Object o = this.getListAdapter().getItem(position); 

       Contact1 c = (Contact1) o;  

       Toast.makeText(this, c.getDisplayName(), 
       Toast.LENGTH_SHORT).show(); 


       Toast.makeText(this, c.getId(), Toast.LENGTH_SHORT).show(); 
       ids.add(c.getDisplayName()); 




      } 

Répondre

1

Cela arrive parce que chaque fois que la liste défile, getView() de l'adaptateur de la listview méthode est appelée lorsque les listitems sont générés à nouveau. Donc, pour votre besoin, vous devez disposer d'un adaptateur personnalisé et remplacer la méthode getView, et il

@override 

public View getView(View view) //Just a mock method, do not copy paste 
{ 

    if(!isVisible[position]){ // isVisible is an array which holds whether a view at position is visible or not 
     //make it invicsible here 
    } 
    return view; 
} 
+0

Merci beaucoup votre suggestion a fonctionné exactement comme je le voulais :-) –

+0

@MohanTimilsina bon à savoir .. – ngesh

0

Si vous vous utilisez l'adaptateur personnalisé et que vous voulez cacher le défilement aussi vous devez maintenir un drapeau en vue de la liste est cliqué puis à l'intérieur getView() faites vos éléments listview ou listview en fonction des positions ou vous pouvez tout cacher comme invisible.

1

L'article, je vais supposer que c'est un objet Contact1, est toujours dans le tableau (ou quel que soit le conteneur que vous utilisez pour contenir les éléments).

Vous aurez besoin d'une des deux choses:

1) supprimer l'élément du tableau, alors régénérer la vue de la liste

2) tenir une liste des éléments invisibles (comme sable suggéré) puis ne pas créer une vue pour eux.

+0

Je choisis l'option 2 et cela a vraiment fonctionné merci beaucoup :-) –

0

vous pouvez utiliser pour cette BaseAdpter et selon la position de vue le rendre visible et invisible

public class ContactsAdapter extends BaseAdapter { 

    ArrayList<ContactInfo> mlist; 
    Context mcontext; 
    // this arraylist used to contains click item 

    List<String> checkednamelist; 

public ContactsAdapter (Context context,ArrayList<ChatInfo> mchtlist) { 

     checkednamelist = new ArrayList<String>(); 
     mlist = mchtlist; 
     mcontext = context;  
    } 

@Override 
public int getCount() { 
    return mlist.size(); 
} 

@Override 
public Object getItem(int postion) { 
    return mlist.get(postion); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
    public View getView(int position, View convertview, ViewGroup viewgroup){ 
     View view = null; 
     if(convertview == null){ 
      LayoutInflater inflater = context.getLayoutInflater(); 
      view = inflater.inflate(R.layout.contactrow, null); 

      ContactHolder holder = new ContactHolder(); 

      holder.txtviewfirstname = (TextView)view.findViewById(R.id.firstname); 
      holder.txtviewphone = (TextView)view.findViewById(R.id.phone); 
      holder.chkselected = (CheckBox)view.findViewById(R.id.check); 




chkselected .setOnClickListener(new OnClickListener() { 
     @Override 
    public void onClick(View v) { 
    // here you can add selected item name for make it invisible from list 
    checkednamelist.add("Stringvalures"); 


}); 

    // this code is helps to achieve that 
try{ 
      if (checkednamelist.contains("yourstringname")) { 
          // here make visible your cotrol 
       chkleft.setChecked(true); 
       chkleft.setVisibility(View.VISIBLE); 
      } else { 

          // here make Invisible your cotrol 
       chkleft.setChecked(false); 
       chkleft.setVisibility(View.INVISIBLE); 
      } 
     }catch(Exception e){ 
      Log.i(TAG, "Exception while checkbox make unchecked when scrolling"+e); 
     } 

     view.setTag(holder); 

    } 
     else{ 
      view = convertview; 
     } 
     ContactHolder holder2 = (ContactHolder) view.getTag(); 
     holder2.txtviewfirstname.setText(list.get(position).firstname); 
     holder2.txtviewphone.setText(list.get(position).phonenumber); 
     holder2.chkselected.setChecked(list.get(position).selected); 
     return view; 
    } 

}

Questions connexes