Элементы ListView не отвечают в пользовательском диалоговом окне

Я разрабатываю приложение, которое отображает некоторые данные в ListView. Данные отлично отображаются в ListView (настраиваемый вид списка). Я также использовал специальный адаптер, который расширяется с помощью BaseAdapter. Я изменил свое приложение, чтобы оно открывало настраиваемое диалоговое окно, когда в представлении списка есть дублированные записи. поэтому моя проблема заключается в том, что элементы в пользовательском диалоговом окне (в представлении списка) не реагируют на прослушиватель onclick

вот мой код (который находится внутри класса адаптера)

        public void showDuplicateDialog(ArrayList<HashMap<String, String>> list){

        AlertDialog.Builder alertDialogBuilder2 = new AlertDialog.Builder(activity);
        LayoutInflater infl = activity.getLayoutInflater();
        View view = infl.inflate(R.layout.dialog_list, null);

        ListView lv = (ListView) view.findViewById(R.id.dialogList);

        //NewsRowAdapter nw = new NewsRowAdapter(mContext, activity, R.layout.dialog_row, list);

        SimpleAdapter sim = new SimpleAdapter(mContext, list, R.layout.dialog_row,  new String[] { STIME,END, DATE }, new int[] {
                R.id.stime2,R.id.etime2, R.id.blank2});

        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                Toast.makeText(mContext, "item clicked ", Toast.LENGTH_LONG).show();
            }
        });

        /*ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                  android.R.layout.two_line_list_item, android.R.id.text1, Names);*/

        alertDialogBuilder2.setView(view);
        alertDialogBuilder2.setAdapter(sim, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                Toast.makeText(mContext, "item clicked ", Toast.LENGTH_LONG).show();
            }
        })



        .setPositiveButton("Accept", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        Toast.makeText(mContext, "Accepted", Toast.LENGTH_LONG).show();
                    }
                })
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        dialog.dismiss();
                    }
                });

        alertDialogBuilder2.show();
    }

может кто-нибудь сказать мне, где проблема?

я также ссылаюсь на инструкции разработчика .. они заявили, что приведенный ниже код должен работать .. но он вообще не отвечает .. никаких ошибок .. никаких исключений .. но не работает

alertDialogBuilder2.setAdapter(sim, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                Toast.makeText(mContext, "item clicked ", Toast.LENGTH_LONG).show();
            }
        })

пожалуйста, помогите мне


person Gishantha Darshana    schedule 05.12.2013    source источник
comment
Ваше представление списка должно быть в контексте вашего пользовательского диалогового окна. Попробуй это   -  person AndroidHacker    schedule 05.12.2013
comment
@AndroidHacker, не могли бы вы объяснить это подробнее, пожалуйста?   -  person Gishantha Darshana    schedule 05.12.2013
comment
Посмотрите мой пост здесь stackoverflow.com/questions/20371218/   -  person AndroidHacker    schedule 05.12.2013
comment
Поделитесь своим dialog_list.xml. у вас есть какие-либо кнопки в этом xml-файле. Если это так, он зафиксирует событие щелчка.   -  person Rethinavel    schedule 05.12.2013
comment
нет, внутри него нет кнопок... только просмотр изображения и несколько текстовых представлений...   -  person Gishantha Darshana    schedule 05.12.2013
comment
Ваш код просмотра списка правильный. В этом нет проблем. Просто посмотрите мой пост   -  person AndroidHacker    schedule 05.12.2013
comment
я сослался на ваш пост .. моя проблема в том, что у меня есть список массивов, подобный этому [{Date=18.11.13, EndTime=09:00, StartTime=08:00}, {Date=18.11.13, EndTime=09:00, StartTime=08:00}, {Date=18.11.13, EndTime=09:00, StartTime=08:00}, {Date=18.11.13, EndTime= 09:00, StartTime=08:00}, {Date=18.11.13, EndTime=09:00, StartTime=08:00}, {Date=18.11.13, EndTime=09: 00:00, StartTime=08:00}] в моем диалоговом окне я просто хочу показать эти элементы.. поэтому я использую и адаптер... что мне делать..?   -  person Gishantha Darshana    schedule 05.12.2013
comment
Код, определенный в моем посте, соответствует всем вашим требованиям. Для этого обязательно нужен адаптер и все остальное, необходимое для создания пользовательского диалога с пользовательским списком.   -  person AndroidHacker    schedule 05.12.2013


Ответы (2)


Если вы отображаете пользовательский макет, включая ListView, тогда не нужно использовать setAdapter для AlertDialog.

Просто установите адаптер в ListView вместо AlertDialog.

public void showDuplicateDialog(ArrayList<HashMap<String, String>> list){

        AlertDialog.Builder alertDialogBuilder2 = new AlertDialog.Builder(activity);
        LayoutInflater infl = activity.getLayoutInflater();
        View view = infl.inflate(R.layout.dialog_list, null);

        ListView lv = (ListView) view.findViewById(R.id.dialogList);

        //NewsRowAdapter nw = new NewsRowAdapter(mContext, activity, R.layout.dialog_row, list);

        SimpleAdapter sim = new SimpleAdapter(mContext, list, R.layout.dialog_row,  new String[] { STIME,END, DATE }, new int[] {
                R.id.stime2,R.id.etime2, R.id.blank2});

        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                Toast.makeText(mContext, "item clicked ", Toast.LENGTH_LONG).show();
            }
        });

        /*ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                  android.R.layout.two_line_list_item, android.R.id.text1, Names);*/

        alertDialogBuilder2.setView(view);
        lv.setAdapter(sim); // Set Adapter to listview




        alertDialogBuilder2.setPositiveButton("Accept", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        Toast.makeText(mContext, "Accepted", Toast.LENGTH_LONG).show();
                    }
                })


        alertDialogBuilder2.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        dialog.dismiss();
                    }
                });

        alertDialogBuilder2.show();
    }

________________________________

Вы также можете использовать функции по умолчанию вместо пользовательского представления.

final CharSequence[] items = {"Foo", "Bar", "Baz"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Make your selection");
builder.setItems(items, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
         // Do something with the selection
    }
});
AlertDialog alert = builder.create();
alert.show();

проверьте это, чтобы узнать больше о alertdilaog.

person Niranj Patel    schedule 05.12.2013
comment
я сделал это... но все еще не могу поймать событие click в представлении списка :( - person Gishantha Darshana; 05.12.2013
comment
но я должен загрузить данные через JSON.. я получил данные из моей службы и удерживаю ArrayList... просто хочу обработать событие щелчка... все равно это не работает.... :( - person Gishantha Darshana; 05.12.2013
comment
Отображаются ли данные в списке?? - person Niranj Patel; 05.12.2013
comment
да... успешно... мне просто нужно обработать событие onclick в списке :( - person Gishantha Darshana; 05.12.2013
comment
мой arraylist вроде этого [{Date=18.11.13, EndTime=09:00, StartTime=08:00}, {Date=18.11.13, EndTime=09:00, StartTime=08:00 AM}, {Date=18.11.13, EndTime=09:00, StartTime=08:00}, {Date=18.11.13, EndTime=09:00, StartTime=08:00} , {Date=18.11.13, EndTime=09:00, StartTime=08:00}, {Date=18.11.13, EndTime=09:00, StartTime=08:00}] как Могу ли я преобразовать это в последовательность символов? - person Gishantha Darshana; 05.12.2013
comment
установите android:focusable=true для всех элементов представления в списке - person Niranj Patel; 05.12.2013

Попробуйте так

 final CharSequence[] items = { "Facebook", "Twitter", "Email" };
     AlertDialog.Builder builder = new AlertDialog.Builder(activity);
     builder.setTitle("Share");
     builder.setItems(items,    new DialogInterface.OnClickListener() {
     public void onClick(DialogInterface dialog,    int item) { 



     if (items[item].equals("Facebook")) {  

     } else if (items[item].equals("Twitter")) {

     } else if (items[item].equals("Email")) {

        }
   });
    AlertDialog alert = builder.create();
  alert.show();
person NagarjunaReddy    schedule 05.12.2013
comment
мой arraylist вроде этого [{Date=18.11.13, EndTime=09:00, StartTime=08:00}, {Date=18.11.13, EndTime=09:00, StartTime=08:00 AM}, {Date=18.11.13, EndTime=09:00, StartTime=08:00}, {Date=18.11.13, EndTime=09:00, StartTime=08:00} , {Date=18.11.13, EndTime=09:00, StartTime=08:00}, {Date=18.11.13, EndTime=09:00, StartTime=08:00}] как Могу ли я преобразовать это в последовательность символов? - person Gishantha Darshana; 05.12.2013
comment
пожалуйста, помогите мне как-нибудь :( - person Gishantha Darshana; 05.12.2013