在我的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);
}
});
}
注意:与项目相关的条件取决于电池,网络速度,网络类型.....等。因此条件不确定地变化,视图可以不断变化。
答案 0 :(得分:1)
尝试使用滚动侦听器。
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);
}
});
}
}
}
答案 1 :(得分:0)
这听起来与android列表视图中的视图回收有关。
如果您的条件定期更新,那么您需要创建一个自定义适配器并拥有最新的引用,以便在每次从适配器中调用getView
时进行检查。