我正在測試應用程序,人們可以在其中看到要解決的問題。在問題頁面上,有一個TextView
顯示該問題,一個ListView
顯示用於在問題之間來回切換的選項和兩個按鈕。在ArrayAdapter的getView方法中調用setSelected方法
我使用SparseArray
在ListView
所選擇的選項位置,質疑從List<Question>
型mAllQuestions
未來位置相關聯。
我也使用AnswerModel看起來是這樣的:
public class AnswerModel
{
public String mAnswerText;
public boolean mIsSelected;
public AnswerModel(String answerText)
{
mAnswerText = answerText;
}
@Override
public String toString()
{
return mAnswerText;
}
}
我用AnswerModel
創建一個ArrayAdapter
,它看起來像這樣:
ArrayAdapter<AnswerModel> adapter = new ArrayAdapter<AnswerModel>(this, android.R.layout.simple_list_item_activated_1)
{
@Override
public View getView(int position, View convertView,
ViewGroup parent) {
View v =super.getView(position, convertView, parent);;
AnswerModel model = getItem(position);
// This is where it does not work.
v.setSelected(model.isSelected);
return v;
}
}
後,我創造我的ArrayAdapter
我執行以下代碼:
List<Answer> answers = getAnswersByQuestionLocation(questionLocation);
for (int i = 0; i < answers.size(); i++)
{
answerAdapter.add(new AnswerModel(mOptionLetters[i] +". "+ answers.get(i).getAnswerText()));
}
and the cod上述e將項目添加到ArrayAdapter
。當在ListView上發生點擊時,我將所選的選項位置和問題位置置於SparseArray
,輸入mAnswerLocationByQuestionLocation
和我使用它來更新選定的選項背景。
if (mAnswerLocationByQuestionLocation.indexOfKey(questionLocation) > -1)
{
MyModel model = (MyModel)mAnswerList.getItemAtPosition(questionLocation);
model.isSelected= true;
answerAdapter.notifyDataSetChanged();
}
}
所以問題是v.setSelected不會更改所選項目的背景顏色在ListView
。 我調試的應用程序和所有isSelected
屬性工程,它實際上通過true
到v.setSelected(model.isSelected)
方法調用。
我已經嘗試了很多方法如下,但他們沒有工作:
- 調用上
ListView
refreshDrawableState()
以及v
。 - 我叫
invalidate()
和postInvalidate()
不起作用。 - 我叫
v.post(new Runnable())
並運行v.setSelected(model.isSelected)
- 我有一個可繪製的選擇器,它設置選定的狀態背景顏色,但沒有運氣。
如果你問我,爲什麼我就是不說v.setBackgroundColor
這不實際工作,但它會導致另一個問題改變v
背景顏色。當我從列表中選擇另一個項目時,它會保持突出顯示,並且會導致單個選項選擇列表中的兩個突出顯示的項目。我可以撥打setBackgroundColor(...Color.white)
setOnItemClick
事件處理程序ListView
中的所有項目,但是當我這樣做時,稍後單擊某個項目不會使項目突出顯示。它就像一個兔子洞。
任何想法?
您使用的是像CheckBox還是RadioButton? – VishalKale