在我的android应用程序中,我有一个创建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);
}
});
}
注意:与项目相关的条件取决于电池、网络速度、网络类型。。。。。因此,情况会不确定地变化,观点也会不断变化。
尝试使用scrolllistener。
listview.setOnScrollListener(new OnScrollListener(){
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
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);
}
});
}
}
}
这听起来像是与android列表视图中的视图回收有关。
如果您的条件是定期更新的,那么您将需要创建一个自定义适配器,并在每次从适配器中调用getView
时都有一个最新的引用进行检查。