簡體   English   中英

隱藏多個空文本視圖

[英]Hide multiple empty textviews

我正在使用帶有CardViewRecyclerView ,其中包括多個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM