В моем приложении Android у меня есть активность, которая создает ListView
. ListView содержит несколько элементов. Каждый элемент связан с определенным условием. Если условие выполнено, элемент должен быть включен и доступен для кликов. В противном случае элемент должен быть отключен и не доступен для кликов. Чтобы постоянно проверять условия, у меня есть отдельный поток, который проверяет условие для каждого элемента и соответственно обновляет представление элемента. Мой код работает без ошибок, но поведение элемента не достигает моей потребности. Иногда элемент остается не кликабельным, даже если его условие выполнено. Иногда элементы можно щелкнуть, даже если условие не выполнено. Иногда элементы ведут себя правильно. Поэтому я считаю, что я осуществляю его ненадлежащим образом, что вызывает такое недетерминированное поведение.Включение и отключение элемента списка ListView
Ниже часть моей деятельности:
menu = new ArrayList<String>();
//menu
//Critical Features
menu.add("View Patient Records");
menu.add("Search in File");
menu.add("Search Medicine");
menu.add("Search by Date");
menu.add("Search by Illness");
menu.add("Report");
//Important Features
menu.add("Identify Nearest Emergency");
menu.add("Identify District Emergency");
menu.add("Planning Intervention");
menu.add("Real-time Assistance");
//Useful Features
listView = (ListView) findViewById(R.id.listView1);
listView.setClickable(true);
ArrayAdapter<String> arrayAdapter =
new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, menu);
listView.setAdapter(arrayAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView <? > arg0, View view, int position, long id) {
// When clicked, show a toast with the TextView text
Ниже часть нити проверки условий и обновления вид:
if(! condition)
{
mainActivity.getListView().post(new Runnable()
{
public void run()
{
View v = mainActivity.getListView().getChildAt(2);
v.setEnabled(false);
v.setOnClickListener(null);
}
});
}
if(condition)
{
mainActivity.getListView().post(new Runnable()
{
public void run()
{
View v = mainActivity.getListView().getChildAt(2);
v.setEnabled(true);
}
});
}
Примечание: состояние, связанное с элементом зависит от батареи, скорости сети, сетевого типа ..... и т. д. Таким образом, состояние изменяется неопределенно, и представление может постоянно меняться.
Вы уверены, что вам действительно нужна эта дополнительная тема? Вам нужен пользовательский адаптер и работайте с его методом 'isEnabled()'. – Luksprog
Если другое решение, кроме потока, может удовлетворить мою потребность, я бы пошел с ним. Не могли бы вы рассказать? –
Эти условия меняются где-то еще за короткие промежутки времени? Или вы просто используете поток для изменения представлений по мере прокрутки пользователя? Если это более поздний случай, тогда вам это действительно не нужно, вам просто нужно реализовать очень простой пользовательский адаптер. – Luksprog