[英]Hide multiple empty textviews
我正在使用帶有CardView
的RecyclerView
,其中包括多個TextView
。 每張卡需要顯示不同數量的TextView
,因此有些將為空,如果為空,則僅在卡上顯示空白。
這全部在RecyclerView
的適配器中執行。
例如:
Card 1: (id 1)
3 TextViews showing
Card 2: (id 2)
10 TextViews showing
Card 3: (id 3)
7 TextViews showing
我目前使用if else語句確定它是哪組文本,然后它分配textviews,設置文本或隱藏視圖。
我試圖創建一個簡單的循環以循環瀏覽所有textview,如果它們為空則將其隱藏。 但是,我嘗試的方法無法正常工作,因為它使用字符串作為TextView
。
適配器類別:
.Adapter<SettingsAdapter
.DataObjectHolder> {
private ArrayList<DataObject> mDataset;
Context context;
public static class DataObjectHolder extends RecyclerView.ViewHolder {
public DataObjectHolder(View itemView) {
super(itemView);
setting1 = (TextView) itemView.findViewById(R.id.textView);
setting2 = (TextView) itemView.findViewById(R.id.textView2);
//... assigning all the textviews
}
}
public SettingsAdapter(ArrayList<DataObject> myDataset, Context context) {
mDataset = myDataset;
this.context = context;
}
@Override
public DataObjectHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.settings_card_view, parent, false);
DataObjectHolder dataObjectHolder = new DataObjectHolder(view);
return dataObjectHolder;
}
@Override
public void onBindViewHolder(DataObjectHolder holder, int position) {
int id= mDataset.get(position).getmIndex();
if (id == 1) {
holder.setting1.setText(mDataset.get(position).getmText1());
holder.setting2.setVisibility(View.GONE);
holder.setting3.setVisibility(View.GONE);
holder.setting4.setVisibility(View.GONE);
holder.setting5.setVisibility(View.GONE);
holder.setting6.setVisibility(View.GONE);
holder.setting7.setVisibility(View.GONE);
holder.setting8.setVisibility(View.GONE);
holder.setting9.setVisibility(View.GONE);
holder.setting10.setVisibility(View.GONE);
} else if (id == 2) {
holder.setting1.setText(mDataset.get(position).getmText1());
holder.setting2.setText(mDataset.get(position).getmText2());
holder.setting3.setText(mDataset.get(position).getmText3());
holder.setting4.setText(mDataset.get(position).getmText4());
holder.setting5.setText(mDataset.get(position).getmText5());
holder.setting6.setText(mDataset.get(position).getmText6());
holder.setting7.setText(mDataset.get(position).getmText7());
holder.setting8.setText(mDataset.get(position).getmText8());
holder.setting9.setText(mDataset.get(position).getmText9());
holder.setting10.setText(mDataset.get(position).getmText10());
} else if (id == 3) {
holder.setting1.setText(mDataset.get(position).getmText1());
holder.setting2.setText(mDataset.get(position).getmText2());
holder.setting3.setText(mDataset.get(position).getmText3());
holder.setting4.setText(mDataset.get(position).getmText4());
holder.setting5.setText(mDataset.get(position).getmText5());
holder.setting6.setText(mDataset.get(position).getmText6());
holder.setting7.setText(mDataset.get(position).getmText7());
holder.setting8.setVisibility(View.GONE);
holder.setting9.setVisibility(View.GONE);
holder.setting10.setVisibility(View.GONE);
}
}
@Override
public int getItemCount() {
return mDataset.size();
}
}
我正在嘗試執行的示例代碼:
int limit = 15;
for(int i = 1; i < limit; i++) {
String textView = "setting" + i;
if(holder.textView.getLineCount() == 0) {
holder.textView.setVisibility(View.GONE);
}
}
就我個人而言,我將從您的textViews創建一個數組,並遍歷所有它們。 如果其文本的長度== 0,則隱藏文本視圖,否則顯示。
另外,如果public void onBindViewHolder()
我一開始也會隱藏並清除所有TextViews。
@Override
public void onBindViewHolder(DataObjectHolder holder, int position) {
for(TextView textView : textViews) {
textView.setText("");
textView.setVisibility(View.GONE);
}
int id= mDataset.get(position).getmIndex();
if (id == 1) {
holder.setting1.setText(mDataset.get(position).getmText1());
} else if (id == 2) {
holder.setting1.setText(mDataset.get(position).getmText1());
holder.setting2.setText(mDataset.get(position).getmText2());
holder.setting3.setText(mDataset.get(position).getmText3());
holder.setting4.setText(mDataset.get(position).getmText4());
holder.setting5.setText(mDataset.get(position).getmText5());
holder.setting6.setText(mDataset.get(position).getmText6());
holder.setting7.setText(mDataset.get(position).getmText7());
holder.setting8.setText(mDataset.get(position).getmText8());
holder.setting9.setText(mDataset.get(position).getmText9());
holder.setting10.setText(mDataset.get(position).getmText10());
} else if (id == 3) {
holder.setting1.setText(mDataset.get(position).getmText1());
holder.setting2.setText(mDataset.get(position).getmText2());
holder.setting3.setText(mDataset.get(position).getmText3());
holder.setting4.setText(mDataset.get(position).getmText4());
holder.setting5.setText(mDataset.get(position).getmText5());
holder.setting6.setText(mDataset.get(position).getmText6());
holder.setting7.setText(mDataset.get(position).getmText7());
}
for(TextView textView : textViews) {
if (textView.getText().length > 0) {
textView.setVisibility(View.VISIBLE);
}
}
}
我認為您可以在DataObject類中執行一個以列表或數組形式返回所有消息的方法。
// Somewhere in your DataObject class, it's important to add all the messages, even if they are empty
public String[] getAllMessages(){
return new String[]{messages1, messages2, messages3};
}
那么您可以創建一個TextView列表以使其循環,例如:
private ArrayList<DataObject> mDataset;
Context context;
//Here your list
private List<TextView> tvList = new ArrayList();
public static class DataObjectHolder extends RecyclerView.ViewHolder {
public DataObjectHolder(View itemView) {
super(itemView);
setting1 = (TextView) itemView.findViewById(R.id.textView);
setting2 = (TextView) itemView.findViewById(R.id.textView2);
// Then you add all your TextViews to your list
tvList.add(setting1);
tvList.add(setting2);
}
}
然后在您的onBindViewHolder
方法中,可以循環您的列表:
@Override
public void onBindViewHolder(DataObjectHolder holder, int position) {
String[] messages = mDataset.get(position).getAllMessages(); // The method that we just code
for(int i = 0; i < tvList.size(); i++){
if(messages[i].isEmpty()){
tvList.get(i).setVisibility(View.GONE);
}else{
tvList.get(i).setVisibility(View.VISIBLE);
tvList.get(i).setText(messages[i]);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.