更改所有列表视图项的可见性(每个列表视图项都是具有 2 个文本视图的线性布局)并隐藏第二个文本视图


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);
 }
}

上面是我的 ArrayAdapter,下面是我的 MainActivity

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) {
}

现在是我的社交媒体课,被称为4次

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;
}

}

DetermineDisplay中,我想访问txtVUserName并将visibility设置为INVISIBLE并折叠其大小。这样当用户选中该复选框时,我的所有listview项我只显示SocialMedia类型。我希望动态执行此操作并在一次调用而不是 for 循环中访问所有值,但是如果我的想法不正确并且 for 循环遍历ListView项并访问每个值是首选方法。这只是一个小功能,但它是必需的。

试试这个:

您的主要活动代码:

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();
}

适配器类代码:

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);
}
}

最新更新