2017-10-13 24 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); 

} 
} 

以上是我ArrayAdapter,和下面是我的MainActivity變化可見性(每個列表視圖項目是2個Textviews線性佈局)和隱藏第二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) { 
} 

這是現在我的社會化媒體類別,這就是所謂的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循環中,但如果我的想法不正確,並且通過遍歷ListView項目並訪問每個值的for循環是首選方法。這只是一個小功能,但它是必需的。

+0

所以,你要訪問的列表視圖的所有txtVUserName? –

+0

是的,這些都在'LinearLayout'內,並且是兩個'Views'都是'TextView',第二個'Textview'是需要隱藏的必需項。 – Xav

+0

好吧試試我已經回答的代碼。 –

回答

0

試試這個:

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

適配器類代碼:

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'僅將'View.INIVISIBLE','View.VISIBLE','View.GONE'作爲參數。你的解決方案很有意義,這部分的功能很難 – Xav

+0

好的。我編輯了我的代碼..請檢查它。 –

相關問題