Пары примера, которые я упомянул для своего приложения для Android. В ListActivity перед методом OnCreate массив элементов был предварительно определен как
String[] items = new String[]{"Text for Item1", "text for item2", ....};
Внутри метода OnCreate я использую самый простой способ установки адаптера и отображения списка ниже:
setListAdapter( new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_checked, items));
И я переопределил метод:
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
CheckedTextView textview = (CheckedTextView)v;
textview.setChecked(!textview.isChecked());
}
Весь вышеприведенный код работает нормально. Галочка для каждого литметра в ListView может отображаться и устанавливать флажок/флажок вручную.
МОЯ ПРОБЛЕМА: Я хочу установить некоторые элементы по программе, а не по щелчку вручную, для проверки/снятия флажка, а также галочку. Можно ли это сделать и как это сделать?
Спасибо за помощь в продвижении
Я думаю, что Ромен Гай, который является инженером Android в Google, в этом может решить ваш пролбэм:
Actually you want to use CheckedTextView with choiceMode. That what
CheckedTextView is for. However, you should not be calling setChecked
from bindView(), but let ListView handle it. The problem was that you
were doing ListView job a second time. You don't need listeners
(click on onlistitem), calls to setChecked, etc.
Вот мое решение для этого:
class MyActivity extends ListActivity { // or ListFragment
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// some initialize
new UpdateCheckedTask().execute(); // call after setListAdapter
}
// some implementation
class UpdateChecked extends AsyncTask<Void, Void, List<Integer>> {
@Override
protected List<Integer> doInBackground(Void... params) {
ListAdapter listAdapter = getListAdapter();
if (listAdapter == null) {
return null;
}
List<Integer> positionList = new ArrayList<Integer>();
for (int position = 0; position < listAdapter.getCount(); position++) {
Item item = (Cursor) listAdapter.getItem(position); // or cursor, depends on your ListAdapter implementaiton
boolean checked = item.isChecked() // your model
positionList.add(position, checked);
}
return positionList;
}
@Override
protected void onPostExecute(List<Integer> result) { // setItemChecked in UI thread
if (result == null) {
return;
}
ListView listView = getListView();
for (Iterator<Integer> iterator = result.iterator(); iterator.hasNext();) {
Integer position = iterator.next();
listView.setItemChecked(position, true);
}
}
}
}