2017-10-13 7 views
0

J'ai un listview personnalisé qui contient button et textview. La visibilité textview a disparu. Lorsque le texte button est "email" et si je clique sur button le textview doit apparaître sous le button. Mais le dernier textview devient toujours visible.textview non visible dans listview lorsqu'un bouton est cliqué sur une ligne particulière

@Override 
public View getView(final int i, View view, ViewGroup viewGroup) { 

    wantedUsers du = wusers.get(i); 

    final String mcontact = du.mcontact; 

    if(view==null) { 
     viewholder = new viewholder(); 
     view = LayoutInflater.from(ws).inflate(R.layout.wantedmoviecustom, null); 
     viewholder.mcontwcustom = (Button)view.findViewById(R.id.mcontwcustom); 

     viewholder.mdisplayemail = (TextView) view.findViewById(R.id.mdisplayemail); 
     view.setTag(viewholder); 
    } else { 
     viewholder = (viewholder) view.getTag(); 
    } 

    viewholder.mdisplayemail.setVisibility(View.GONE); 

    if(mcontact.contains("@")) { 
     viewholder.mcontwcustom.setText("Show Email"); 
     viewholder.mdisplayemail.setText(mcontact); 
    } else { 
     viewholder.mcontwcustom.setText("Call"); 
    } 

    viewholder.mcontwcustom.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      if(mcontact.contains("@")) { 
       int p=(Integer)view.getTag(); 

       viewholder.mdisplayemail.setVisibility(View.VISIBLE); 
       // viewholder.mdisplayemail.setText(mcontact); 

      } 
      else 
      { 
       Uri call = Uri.parse("tel:" + mcontact); 
       Intent surf = new Intent(Intent.ACTION_DIAL, call); 
       ws.startActivity(surf); 
      } 
     } 
    }); 
    viewholder.mcontwcustom.setTag(i); 
    return view; 
} 

ci-dessous est mon getview de la coutume adapter. Alors, comment puis-je faire textviewvisbile quand un button a cliqué sur la ligne en particulier.

+0

vous devez changer 'viewholder.mdisplayemail.setVisibility();' à 'viewholder.mdisplayemail.setVisibility (View.VISIBLE);' – UltimateDevil

+0

Montrez-moi votre disposition? –

+0

@ user2269164 vérifier ma réponse peut résoudre votre problème – UltimateDevil

Répondre

1

D'abord, vous devez créer un global variables

int positionOfButtonClick = -1; 

alors vous devez mettre à jour votre position sur button clic et vous devez appeler notifyDataSetChanged();

comme -:

viewholder.mcontwcustom.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     positionOfButtonClick = i; 
     notifyDataSetChanged(); 
    //your other code  
}); 

Ensuite, dans getView

vous devez vérifier la position et la nécessité de VISIBLE votre textView comme -:

if(i==positionOfButtonClick){ 
viewholder.mdisplayemail.setVisibility(View.VISIBLE); 
} 

Maintenant, votre getView devrait être-:

@Override 
public View getView(final int i, View view, ViewGroup viewGroup) { 

wantedUsers du = wusers.get(i); 

final String mcontact = du.mcontact; 



if(view==null) { 
    viewholder = new viewholder(); 
    view = LayoutInflater.from(ws).inflate(R.layout.wantedmoviecustom, null); 
    viewholder.mcontwcustom = (Button)view.findViewById(R.id.mcontwcustom); 

    viewholder.mdisplayemail = (TextView) view.findViewById(R.id.mdisplayemail); 


if(i==positionOfButtonClick){ 
viewholder.mdisplayemail.setVisibility(View.VISIBLE); 
}else{ 
    viewholder.mdisplayemail.setVisibility(View.GONE); 
    } 


    view.setTag(viewholder); 
} else { 
    viewholder = (viewholder) view.getTag(); 
} 



if(mcontact.contains("@")) { 
    viewholder.mcontwcustom.setText("Show Email"); 
    viewholder.mdisplayemail.setText(mcontact); 
} else { 
    viewholder.mcontwcustom.setText("Call"); 
} 

viewholder.mcontwcustom.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 

     if(mcontact.contains("@")) { 
      int p=(Integer)view.getTag(); 



     positionOfButtonClick = i; 
     notifyDataSetChanged(); 

     } 
     else 
     { 
      Uri call = Uri.parse("tel:" + mcontact); 
      Intent surf = new Intent(Intent.ACTION_DIAL, call); 
      ws.startActivity(surf); 
     } 
    } 
}); 
viewholder.mcontwcustom.setTag(i); 
return view; 
} 
+0

@ user2269164 essayez cela aidera – UltimateDevil

+0

@ user2269164 avez-vous essayé ce – UltimateDevil

+0

merci cela a fonctionné. – user2269164

0

Changement de code comme mentionné ci-dessous, je pense que cela vous aide.

viewholder.mcontwcustom.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      if(mcontact.contains("@")) { 
       int p=(Integer)view.getTag(); 

       viewholder.mdisplayemail.setVisibility(View.VISIBLE); 
       // viewholder.mdisplayemail.setText(mcontact); 

      } 
+0

@UltimateDevil - Il permettra la textview dans la dernière rangée.pas celle sur laquelle j'ai cliqué. – user2269164

+0

Oui, Attendez je mets à jour la réponse – UltimateDevil