不断启用和禁用ListView项



在我的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时都有一个最新的引用进行检查。

相关内容

  • 没有找到相关文章

最新更新