Я работаю над тестовым приложением, в котором люди могут видеть вопросы для решения. На странице вопросов есть TextView
, чтобы показать вопрос, ListView
, чтобы показать варианты и две кнопки для повторения вопросов.Вызов метода setSelected в методе getView ArrayAdapter
Я использую SparseArray
связать выбранную позицию опции в ListView
на вопрос местоположения, исходят от mAllQuestions
типа List<Question>
.
Я также с помощью 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()));
}
и треска 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)
вызов метода.
Я перепробовал много способов, как следует, но они не работали:
- Вызов
refreshDrawableState()
наListView
, аv
. - Я позвонил
invalidate()
иpostInvalidate()
не работает. - Я позвонил
v.post(new Runnable())
и работалv.setSelected(model.isSelected)
- У меня есть поворотный селектор, который устанавливает выбранный цвет фона состояния, но не повезло.
Если вы спросите меня, почему я просто не изменить цвет фона v
говоря v.setBackgroundColor
, который на самом деле работает, но это вызывает другую проблему. Когда я выбираю другой элемент из списка, он остается подсвеченным, и это приводит к двум выделенным элементам в одном списке выбора опций. Я могу позвонить setBackgroundColor(...Color.white)
из всех элементов в setOnItemClick
обработчиком событий ListView
, но когда я это сделаю, нажатие на элемент позже не делает элемент выделенным. Это похоже на кроличью нору.
Любые идеи?
Какой вид вы используете, например, CheckBox или RadioButton ?? – VishalKale