【问题标题】:Android programming - onitemclicklistener for multiple listviews doesn't workAndroid 编程 - 多个列表视图的 onitemclicklistener 不起作用
【发布时间】:2013-01-13 21:10:07
【问题描述】:

在我的活动中,我创建了七个列表视图,并在同一个活动中使用 viewpager 在它们之间滑动。然后我有一个 sqlite 数据库填充每个列表视图。我的问题是 onitemclicklistener 不起作用,没有错误,代码执行良好,但列表项点击没有任何反应。我通过添加 toast 显示消息等对其进行了测试,但列表项点击没有任何反应。

我怀疑问题是我没有像传统方法那样从 xml 布局中获取列表视图,因此 itemclicklistener 方法略有不同,但是我不知道在以这种方式使用列表视图时使用什么方法,并且没有其他操作系统线程我见过以这种方式创建列表视图。 如果有人可以请提供一些启发,我将不胜感激。提前致谢。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        mContext = this;
        setContentView(R.layout.activity_schedule);

        ListView listview1 = new ListView(mContext);
        ListView listview2 = new ListView(mContext);
        ListView listview3 = new ListView(mContext);
        ListView listview4 = new ListView(mContext);
        ListView listview5 = new ListView(mContext);
        ListView listview6 = new ListView(mContext);
        ListView listview7 = new ListView(mContext);


        Vector<View> pages = new Vector<View>();

        pages.add(listview1);
        pages.add(listview2);
        pages.add(listview3);
        pages.add(listview4);
        pages.add(listview5);
        pages.add(listview6);
        pages.add(listview7);

        ViewPager vp = (ViewPager) findViewById(R.id.viewpager);
        PageAdapter adapter = new PageAdapter(mContext,pages);
        vp.setAdapter(adapter);


        db.open();
        scheduleAdapter = new ScheduleAdapter(ScheduleActivity.this, db.getMonday(),CursorAdapter.NO_SELECTION );
        listview1.setAdapter(scheduleAdapter);      
        db.close();

        db.open();
        scheduleAdapter = new ScheduleAdapter(ScheduleActivity.this, db.getTuesday(),CursorAdapter.NO_SELECTION );
        listview2.setAdapter(scheduleAdapter);      
        db.close();

        db.open();
        scheduleAdapter = new ScheduleAdapter(ScheduleActivity.this, db.getWednesday(),CursorAdapter.NO_SELECTION );
        listview3.setAdapter(scheduleAdapter);      
        db.close();

        db.open();
        scheduleAdapter = new ScheduleAdapter(ScheduleActivity.this, db.getThursday(),CursorAdapter.NO_SELECTION );
        listview4.setAdapter(scheduleAdapter);      
        db.close();

        db.open();
        scheduleAdapter = new ScheduleAdapter(ScheduleActivity.this, db.getFriday(),CursorAdapter.NO_SELECTION );
        listview5.setAdapter(scheduleAdapter);      
        db.close();

        db.open();
        scheduleAdapter = new ScheduleAdapter(ScheduleActivity.this, db.getSaturday(),CursorAdapter.NO_SELECTION );
        listview6.setAdapter(scheduleAdapter);      
        db.close();

        db.open();
        scheduleAdapter = new ScheduleAdapter(ScheduleActivity.this, db.getSunday(),CursorAdapter.NO_SELECTION );
        listview7.setAdapter(scheduleAdapter);      
        db.close();

         listview1.setOnItemClickListener(new ListView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

                }
        });

【问题讨论】:

    标签: android android-listview onitemclicklistener onitemclick


    【解决方案1】:

    根据您的描述,我了解到这些列表是在您启动应用程序时显示的。

    位置参数,保存用户在(屏幕)列表上单击的位置。

    您是否尝试将它与开关盒一起使用?

    我的意思是这样的:

    list.setOnItemClickListener(new OnItemClickListener(){
                      public void onItemClick( AdapterView <?> parent, View view, int   
                                               position,long id){
    
                           switch(position){
                                case 0:
                               // write what you need here when the user clicks on the first list item
                                  break;
                                case 1:
                               // write what you need here when the user clicks on the 2nd list item 
                                   break;
                           }
                      }
                   };
    

    希望对你有帮助

    【讨论】:

    • 对于那些对类似案例的解决方案感兴趣的人来说,这很有效。感谢您的帮助,很抱歉耽搁了,正在浏览帖子并意识到我从未接受过答案
    • 很高兴听到我的解决方案对您有所帮助:)
    【解决方案2】:

    我不太确定为什么当您在 listview1 中按下某些东西时没有调用 itemClicklistener,但我认为这不是最大的问题。

    在 1 个活动中添加 7 个列表视图,并且连续打开和关闭数据库 7 次,你的开局很糟糕。

    我建议您从应用程序 Android UI 模式开始:https://play.google.com/store/apps/details?id=com.groidify.uipatterns

    在那里,您会发现一个页面充满了浏览器和标签示例。我建议你拿杰克沃顿那一个。

    你想用 Fragments 来做这件事。

    【讨论】:

      【解决方案3】:

      在您的 ListFragment 中,您应该扩展 ListFragment,然后使用 onListItemClick,如下所示:

      public class ArrayListFragment extends ListFragment {
      
      @Override                               
              public void onActivityCreated(Bundle savedInstanceState) {
                  super.onActivityCreated(savedInstanceState);
                  setListAdapter(new ArrayAdapter<String>(getActivity(),
                          android.R.layout.simple_list_item_1, Listnames.TITLES));
              }
      
              @Override
              public void onListItemClick(ListView l, View v, int position, long id) {
                  Log.i("FragmentList2", "Item clicked: " + id);
      
                  String item = (String) getListAdapter().getItem(position);
      
                  Intent intent = new Intent(getActivity(), SearchableActivity.class);
                  intent.putExtra("item", item);
                  Toast.makeText(getActivity(), item, Toast.LENGTH_LONG).show();
      //          startActivity(intent);
              }
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多