【问题标题】:ListView items does not respond in a custom dialog boxListView 项目在自定义对话框中没有响应
【发布时间】:2013-12-05 06:02:50
【问题描述】:

我正在开发一个向 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();
            }
        })

请帮帮我

【问题讨论】:

  • 您的列表视图应该在您的自定义对话框的上下文中。试试这个
  • @AndroidHacker 你能进一步解释一下吗?
  • 在这里查看我的帖子stackoverflow.com/questions/20371218/…
  • 分享你的“dialog_list.xml”。你在那个 xml 文件上有任何按钮吗?如果是这样,它将捕获点击事件。
  • 不,里面没有按钮...只有图像视图和一些文本视图...

标签: android listview customdialog


【解决方案1】:

如果您要显示自定义布局,包括 ListView,则不需要在 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();

check this for more about alertdilaog.

【讨论】:

  • 我已经完成了...但仍然无法在列表视图中捕捉到点击事件:(
  • 但我必须通过 JSON 加载数据..我已经从我的服务中获取数据并由 ArrayList 持有...只想处理点击事件...仍然没有t 工作.... :(
  • 数据是否出现在列表视图中??
  • 是的...成功...我只需要处理列表上的onclick事件:(
  • 我的数组列表像这样 [{Date=11/18/13, EndTime=09:00 AM, StartTime=08:00 AM}, {Date=11/18/13, EndTime=09: 00 AM,开始时间=08:00 AM},{日期=11/18/13,结束时间=09:00 AM,开始时间=08:00 AM},{日期=11/18/13,结束时间=09:00 AM , StartTime=08:00 AM}, {Date=11/18/13, EndTime=09:00 AM, StartTime=08:00 AM}, {Date=11/18/13, EndTime=09:00 AM, StartTime =08:00 AM}] 如何将其转换为字符序列?
【解决方案2】:

这样试试

 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();

【讨论】:

  • 我的数组列表像这样 [{Date=11/18/13, EndTime=09:00 AM, StartTime=08:00 AM}, {Date=11/18/13, EndTime=09: 00 AM,开始时间=08:00 AM},{Date=11/18/13,EndTime=09:00 AM,StartTime=08:00 AM},{Date=11/18/13,EndTime=09:00 AM , StartTime=08:00 AM}, {Date=11/18/13, EndTime=09:00 AM, StartTime=08:00 AM}, {Date=11/18/13, EndTime=09:00 AM, StartTime =08:00 AM}] 如何将其转换为字符序列?
  • 请帮帮我:(
猜你喜欢
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
相关资源
最近更新 更多