2017-10-13 6 views
0
public class MediaAdapter extends ArrayAdapter<SocialMedia> { 

private Context context; 
private int resource; 
public MediaAdapter(Context context, int resource, ArrayList<SocialMedia> objects){ 
    super(context,resource,objects); 

    this.resource = resource; 
    this.context = context; 



} 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if(convertView == null){ 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     convertView = inflater.inflate(resource, parent, false); 
    } 

    TextView txtVMediaName = convertView.findViewById(R.id.txtV_Media_Name); 
    TextView txtVUserName = convertView.findViewById(txtV_User_Name); 
    CheckBox test = R.id.chk_Display_Info; 
    txtVUserName.setVisibility(test.isChecked()?1:0); 
    SocialMedia socMedia = getItem(position); 


    txtVMediaName.setText(socMedia.getName()); 
    txtVUserName.setText(socMedia.getUserId()); 
    return (convertView); 

} 
} 

Ce qui précède est mon ArrayAdapter et Ci-dessous mon MainActivityModifier la visibilité de tous les éléments de ListView (chaque élément listview est une disposition linéaire avec 2 Textviews) et cacher la seconde textview

public class MainActivity extends Activity { 
private CheckBox chkDisInfo; 
private ListView lstVSocMedDis; 

private class onClickDisplayInfo implements CompoundButton.OnCheckedChangeListener{ 

    @Override 
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
     DetermineDisplay(b); 
    } 
} 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    chkDisInfo = findViewById(R.id.chk_Display_Info); 
    chkDisInfo.setChecked(true); 
    lstVSocMedDis = findViewById(R.id.lstv_DisplaySoc); 
    loadData(); 
    chkDisInfo.setOnCheckedChangeListener(new onClickDisplayInfo()); 
} 

private void loadData() { 
    ArrayList<SocialMedia> calledSocMedia = SocialMedia.getMedia(); 

    MediaAdapter adapterM = new MediaAdapter(this, R.layout.list_media_info, calledSocMedia); 
    lstVSocMedDis.setAdapter(adapterM); 
} 

private void DetermineDisplay(boolean b) { 
} 

Voici maintenant ma SocialMedia classe, qui est appelé 4 fois

public class SocialMedia { 
//Field Variables 
private String name; 
private String userId; 
private int numContacts; 

//Constructor 3 PARAM - Name(String) - UserID(String) - Number of Contact(int) 
public SocialMedia(String name, String userId, int numContacts){ 
    this.name = name; 
    this.userId = userId; 
    this.numContacts = numContacts; 
} 

//Setter/Getters 

//Getter(String) - Void - Name 
public String getName(){ 
    return this.name; 
} 
//Setter(Void) - String - Name 
public void setName(String newName){ 
    this.name = newName; 
} 

//Getter(String) - Void - UserID 
public String getUserId(){ 
    return this.userId; 
} 
//Setter(Void) - String - Name 
public void setUserId(String newUserId){ 
    this.userId = newUserId; 
} 

//Getter(int) - Void - NumContacts 
public int getNumContacts(){ 
    return this.numContacts; 
} 
//Setter(Void) - int - NumContacts 
public void setNumContacts(int newNumContacts){ 

    this.numContacts = newNumContacts; 
} 

//Return Type - 
@Override 
public String toString(){ 
    return String.format("%s, %s, %d", this.name,this.userId,this.getNumContacts()); 
} 
public static ArrayList<SocialMedia> getMedia() { 

    ArrayList<SocialMedia> socMedia = new ArrayList<>(); 

    socMedia.add(new SocialMedia("LinkedIn","Batman",100)); 
    socMedia.add(new SocialMedia("Facebook","Not Bruce Wayne", 100)); 
    socMedia.add(new SocialMedia("Twitter","Batz_Rulez", 100)); 
    socMedia.add(new SocialMedia("Instagram","Gotham_Nights", 100)); 

    return socMedia; 
} 

}

Dans DetermineDisplay Je veux accéder à et définir le visibility à INVISIBLE et réduire sa taille. Ainsi, lorsque l'utilisateur sélectionne la case à cocher, tous mes articles listview affichent uniquement le type SocialMedia. Je souhaite le faire de manière dynamique et accéder à toutes les valeurs d'un appel plutôt qu'à une boucle for, mais si ma pensée est incorrecte et qu'une boucle for itère les éléments ListView et que l'accès à chaque valeur est la méthode préférée. Ceci est juste une petite caractéristique, mais c'est nécessaire.

+0

Vous voulez accéder à toutes txtVUserName de listview? –

+0

oui, ceux-ci sont dans 'LinearLayout' et sont deux' Views' deux étant 'TextView' et le second' Textview' est celui qui doit être caché – Xav

+0

Ok, essayez le code auquel j'ai répondu. –

Répondre

0

Essayez ceci:

Votre Code MainActivity:

public class MainActivity extends Activity { 
public CheckBox chkDisInfo; 
private ListView lstVSocMedDis; 
MediaAdapter adapterM 

private class onClickDisplayInfo implements CompoundButton.OnCheckedChangeListener{ 

@Override 
public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
    DetermineDisplay(b); 
} 
} 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
chkDisInfo = findViewById(R.id.chk_Display_Info); 
chkDisInfo.setChecked(true); 
lstVSocMedDis = findViewById(R.id.lstv_DisplaySoc); 
loadData(); 
chkDisInfo.setOnCheckedChangeListener(new onClickDisplayInfo()); 
} 

private void loadData() { 
ArrayList<SocialMedia> calledSocMedia = SocialMedia.getMedia(); 

adapterM = new MediaAdapter(this, R.layout.list_media_info, calledSocMedia); 
lstVSocMedDis.setAdapter(adapterM); 
} 

private void DetermineDisplay(boolean b) { 
adapterM.notifyDataSetChanged(); 
} 

Votre code de classe d'adaptateur:

public class MediaAdapter extends ArrayAdapter<SocialMedia> { 

private Context context; 
private int resource; 
public MediaAdapter(Context context, int resource, ArrayList<SocialMedia> objects){ 
super(context,resource,objects); 

this.resource = resource; 
this.context = context; 



} 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

if(convertView == null){ 
    LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
    convertView = inflater.inflate(resource, parent, false); 
} 

TextView txtVMediaName = convertView.findViewById(R.id.txtV_Media_Name); 
TextView txtVUserName = convertView.findViewById(txtV_User_Name); 
//CheckBox test = R.id.chk_Display_Info; 

if(((MainActivity)context).chkDisInfo.isChecked()){ 
    txtVUserName.setVisibility(View.GONE); 
} 
else{ 
    txtVUserName.setVisibility(View.VISIBLE); 
} 
SocialMedia socMedia = getItem(position); 


txtVMediaName.setText(socMedia.getName()); 
txtVUserName.setText(socMedia.getUserId()); 
return (convertView); 

} 
} 
+0

'setVisibility' ne prend que' View.INIVISIBLE', 'View.VISIBLE',' View.GONE' comme params. Votre solution a du sens, la fonctionnalité de cette partie est difficile – Xav

+0

Ok .. J'ai édité mon code .. Veuillez le vérifier. –