簡體   English   中英

如何為列表適配器的每個條目具有另一組列表項的列表適配器動態創建視圖?

[英]How to dynamically create views for list adapter with each item of the list view having another set of list items?

我有一個用於顯示問題列表的列表視圖的適配器。 每個問題都有一個帶有復選框或單選按鈕的答案選項,還可以帶有圖像以及答案選項。 答案選項的數量因問題類型而異,例如1個問題可能具有2個單選按鈕答案選項,而其他一些問題可能具有4個復選框答案選項以及圖像視圖。 一個問題不能同時具有復選框和單選按鈕作為答案選項。

如何執行這樣的要求? 我是否需要嵌套一個問題適配器,而另一個適配器嵌套在問題中? 我可以通過在適配器的getView()中動態地以編程方式創建視圖來實現我的問題答案。 但是事實是,我無法為每個答案選項重復使用答案選項的已創建視圖。 它總是為每個選項創建答案視圖,這需要花費大量時間來呈現和顯示數據給用戶。

如果我采用正確的方法,如何優化解決方案? 謝謝。

一些代碼片段如下所示:

  1. 里面的getView()方法:

// optionsList包含每個問題的答案選項。 因此,我循環循環以創建每個視圖。

for (int opt = 0; opt < optionsList.size(); opt++) {
    addOptionsView(opt, optionsList.get(opt), position);
}
//The above for loop will be for each question
  1. 在addOptionsView()方法內部:

(在一行中,我有兩個水平線性布局,一個用於答案圖像和答案文本,第二個用於CheckBox或RadioButton):

//Each answer option
final LinearLayout optionRow = new LinearLayout(getContext());//Parent

//For image or answer text
final LinearLayout imageOrText = new LinearLayout(getContext());//Child1

//For radio or checkbox
final LinearLayout radioOrCheckbox = new LinearLayout(getContext());//Child2

//add image when option has an image
if (mData.get(questionNo).getOptionImages().size() > 0) {
//create ImageView here
    imageOrText.addView(optionImage);
}
TextView mOptionName = new TextView(getContext());
mOptionName.setText(optionName);//Here create answer option and set the text on it.
imageOrText.addView(mOptionName);
optionRow.addView(imageOrText);

radioOrCheckbox.addView(optionCheckType);//Check type is either CheckBox or RadioButton
optionRow.addView(radioOrCheckbox); // Finally add above two layout in parent view.

//something more like this
viewHolder.txtQuestion.setText(mData.get(position).getQuestion());
//Here view holder class
private class ViewHolder {

TextView txtQuestion;
LinearLayout llQuestionLayout;

public ViewHolder(View view) {
    txtQuestion = (TextView) view.findViewById(R.id.questionValue);
    llQuestionLayout = (LinearLayout)view.findViewById(R.id.questionLayout);
    }
}

注意:上面的代碼片段中沒有出現針對每個答案選項視圖的重用代碼,因此,它動態地為每個答案選項創建答案視圖時需要花費一些時間來渲染數據。

您可以將Recyclerview用於兩個列表。 為您的每個recyclerviews創建兩個適配器。 各個回收者視圖將處理視圖的可重用性。 我找到了一篇可能對您有用的文章,以幫助您了解https://dannysu.com/2015/10/11/list-in-list-in-list/ 嵌套回收器視圖是避免在ui層上使用內存的更好方法,因為它可以處理視圖的創建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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