Android编程 - 用于多个列表视图的onitemclicklistener不起作用

时间:2013-01-13 21:10:07

标签: android android-listview onitemclicklistener onitemclick

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

我怀疑问题是我没有得到像传统方法那样的xml布局的listviews所以itemclicklistener方法略有不同,但是我不知道在使用listview这种方式时使用什么方法而没有其他操作系统线程我见过以这种方式创建列表视图。 如果有人可以请一些亮点,我会非常感激。提前致谢。

    @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) { 

                }
        });

3 个答案:

答案 0 :(得分:0)

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

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

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

我是这样的意思:

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;
                       }
                  }
               };

希望这会对你有所帮助

答案 1 :(得分:0)

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

在一项活动中添加7个列表视图,以及在数据库中相互打开和关闭7次后,您的开始可怕。

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

在那里,您将找到一个包含浏览器和标签示例的页面。我建议你带杰克沃顿一个。

你想用Fragments做这件事。

答案 2 :(得分:0)

在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);
        }

    }