StackOverflow社區,我需要你的幫助(再次)!我創建了一個自定義類來快速創建View對象(基本上它只是一個顯示的問題)。 例:Android充氣視圖多次取決於按鈕狀態 - 優化
標題:Home
消息:是否有貓住在一起?
[BtnYes] ------------------------ [BtnNo]
因此,這裏是我的自定義類 「QuestionHelper」 來編程創建問題:
public List<LinearLayout> addQuestion(ViewGroup rootView, String title, String message, int id) {
List<LinearLayout> mButtons = new ArrayList<>();
// Inflate une question
LayoutInflater questionInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
RelativeLayout myQuestion = (RelativeLayout) questionInflater.inflate(R.layout.activity_formulaire_question, rootView, false);
// Assigne la vue au controlleur
tvTitle = (TextView) myQuestion.findViewById(R.id.activity_formulaire_question_title);
tvMessage = (TextView) myQuestion.findViewById(R.id.activity_formulaire_question_message);
// Remplissage des champs textes
tvTitle.setText(title);
tvMessage.setText(message);
// Boutton sous la forme de LinearLayout
btnNo = (LinearLayout) myQuestion.findViewById(R.id.activity_formulaire_question_ll_btn_no);
btnYes = (LinearLayout) myQuestion.findViewById(R.id.activity_formulaire_question_ll_btn_yes);
// Ajout dans la liste
mButtons.add(btnNo);
mButtons.add(btnYes);
return mButtons;
}
這是,我認爲,編程的壞的方式(因爲我不尊重MVC模式,按鈕狀態由視圖片段管理,有很多線路)。
final LinearLayout rootQuestion = (LinearLayout) rootView.findViewById(R.id.activity_formulaire_questions_preliminaires_ll_wrapper);
final QuestionHelper questionHelper = new QuestionHelper(super.getActivity());
List<LinearLayout> question1 = questionHelper.addQuestion(rootQuestion,
getResources().getString(R.string.question_preliminaire_1_title),
getResources().getString(R.string.question_preliminaire_1_message), 1);
question1.get(0).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<LinearLayout> question2 = questionHelper.addQuestion(rootQuestion,
getResources().getString(R.string.question_preliminaire_2_title),
getResources().getString(R.string.question_preliminaire_2_message), 2);
}
});
question1.get(1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<LinearLayout> question3 = questionHelper.addQuestion(rootQuestion,
getResources().getString(R.string.question_preliminaire_3_title),
getResources().getString(R.string.question_preliminaire_3_message), 3);
question3.get(0).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<LinearLayout> question4 = questionHelper.addQuestion(rootQuestion,
getResources().getString(R.string.question_preliminaire_4_title),
getResources().getString(R.string.question_preliminaire_4_message), 4);
question4.get(0).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<LinearLayout> question6 = questionHelper.addQuestion(rootQuestion,
getResources().getString(R.string.question_preliminaire_6_title),
getResources().getString(R.string.question_preliminaire_6_message), 6);
}
});
}
});
question3.get(1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<LinearLayout> question5 = questionHelper.addQuestion(rootQuestion,
getResources().getString(R.string.question_preliminaire_5_title),
getResources().getString(R.string.question_preliminaire_5_message), 5);
question5.get(1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<LinearLayout> question6 = questionHelper.addQuestion(rootQuestion,
getResources().getString(R.string.question_preliminaire_6_title),
getResources().getString(R.string.question_preliminaire_6_message), 6);
}
});
}
});
}
});
我可以根據先前的問題有多達8個問題。
更新:To explain clearly what I mean, here is an image.您認爲我們可以優化這個過程嗎?
UPDATE 2:我找了一個QuestionHolder類,它接受view,differents變量,並用get/set標籤保存它。我以正確的方式嗎?
更新3: QuestionHolder指與getTag相同的觀點......
UPDATE 4:顯示的看法是這樣的:case 1 : when I press YES YES YES但是當我上下滾動按否的問題1it looks like that.問題3 & 4 | 5 & 6被去除,並且讓顯示問題2 爲爲例,我手動終止應用程序並重新裝載它... :(]
更新5:我創建了一個適配器一個ListView,但它比我想象的更難。所以我可能會放棄,做它的「骯髒的方式」
圖像清楚地說明你想實現什麼,但有了解的問題IM什麼阻止你這樣做的問題。 – Nanoc
這是爲了優化的目的。我可以這樣做,但是我覺得它不夠雅緻,而且在問題太多時不可讀。我正在考慮用'switch(button.getId)'創建一個'setButtonState(boolean choice)'方法來標識**選擇了哪個按鈕**,然後動態刪除或添加下一個問題,但是我沒有目前還沒有設法實現它:) **目標是用MVC模式編寫最清晰的代碼** – Nawako
那麼,你可以創建一個視圖來顯示你的問題和按鈕,以及一個模型類來存儲每個問題,然後我將使用startActivityForResult()來顯示問題並獲得單擊的按鈕作爲返回值,這樣您就可以將視圖與模型分開(MVC),並可以在分開的活動中管理下一個問題的邏輯 – Nanoc