Программирование для Android - onitemclicklistener для нескольких списков не работает

В своей деятельности я создал семь списков и использую viewpager для переключения между ними в одном и том же действии. Затем у меня есть база данных sqlite, заполняющая каждый список. Моя проблема в том, что onitemclicklistener не работает, ошибок нет, код выполняется нормально, но ничего не происходит при кликах по элементам списка. Я проверил это, добавив всплывающие сообщения и т. д., но ничего не происходит при щелчке элемента списка.

Я подозреваю, что проблема в том, что я не получил списки из макетов xml, как обычный метод, поэтому метод itemclicklistener немного отличается, однако я не знаю, какой метод использовать при использовании списков таким образом, а не другие потоки ОС, которые у меня были Seen таким образом создает списки. Если бы кто-нибудь мог пролить свет, я был бы очень благодарен. Заранее спасибо.

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

                }
        });

person Incognito    schedule 13.01.2013    source источник


Ответы (3)


Из вашего описания я понимаю, что списки отображаются при запуске приложения.

Параметр position содержит место, где пользователь щелкнул (экран) - список.

Вы пытались использовать его с переключателем?

Я имею в виду вот так:

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

Надеюсь, что это поможет вам

person Elior    schedule 13.01.2013
comment
Для тех, кто интересовался решением для подобных случаев, это сработало. Спасибо за помощь и извините за задержку, просматривал сообщения и понял, что никогда не принимал ответ - person Incognito; 02.04.2013
comment
Рад слышать, что мое решение помогло вам :) - person Elior; 05.04.2013

Я не совсем уверен, почему itemClicklistener не вызывается, когда вы нажимаете что-то в listview1, но я не думаю, что это самая большая проблема.

Вы начинаете с ужасного старта, добавляя 7 списков в 1 действии и открывая и закрывая базу данных 7 раз подряд друг за другом.

Я предлагаю вам начать с шаблонов пользовательского интерфейса Android: https://play.google.com/store/apps/details?id=com.groidify.uipatterns

Там вы найдете страницу, полную примеров просмотров и вкладок. Я бы посоветовал тебе взять Джейка Уортона.

Вы хотите делать это с фрагментами.

person Stefan de Bruijn    schedule 13.01.2013

В вашем 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);
        }

    }
person Marckaraujo    schedule 13.01.2013