列表项longClickListener打开对话框在android中不起作用?

时间:2013-06-20 05:09:12

标签: android listview dialog long-press

我在列表上工作,在这个列表中setOnItemLongClickListener编写代码部分,用户长按打开对话框但是对话框没有打开?请发送任何打开对话框的建议?

listshipments.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() 
        {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) 
            {
                view.setSelected(true);
                TextView tv = (TextView) view.findViewById(R.id.txtName);
                String shipmenttxt = tv.getText().toString();
                int b=delete_Message("Delete ", "Do you want delete shipment id", "Delete", "Cancel",shipmenttxt,position);
                if(b==1){
                    this.mList.remove(position);
                    adapter.notifyDataSetChanged(); 
                }
                return true;

            }

    });

@SuppressWarnings("deprecation")
    private int delete_Message(String sTitle,String sMessage,String sButton1_Text,String sButton2_Text,final String msg,final int position)
    {

        try {
            alertDialog = new AlertDialog.Builder(getParent()).create();
            alertDialog.setTitle(sTitle);
            alertDialog.setIcon(R.drawable.info);
            alertDialog.setMessage(sMessage);
            alertDialog.setButton(sButton1_Text, new DialogInterface.OnClickListener() 
            {
                public void onClick(DialogInterface dialog, int which) 
                {
                    aa=1;
                    delete(msg);

                    //new LoadDatashipment().execute();
                    return ;

                } });

            alertDialog.setButton2(sButton2_Text, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    aa=0;
                    //return;
                }});

            alertDialog.show();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   

        return aa;
    }

2 个答案:

答案 0 :(得分:3)

如果列表中的任何行项包含可聚焦或可点击的视图,则您的点击侦听器可能无法正常工作

您必须将此行放在自定义listviews row_item.xml文件中 即android:descendantFocusability="blocksDescendants"

例如:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:descendantFocusability="blocksDescendants"
//other layout info here .....
>
</LinearLayout>

我认为你需要做的就是在显示你的对话之前

alertD = alertDialog.create();

并显示

alertD.show();

点击此处查看 http://www.mkyong.com/android/android-alert-dialog-example/

答案 1 :(得分:0)

试试这段代码:

listshipments.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        view.setSelected(true);
        TextView tv = (TextView) view.findViewById(R.id.txtName);
        String shipmenttxt = tv.getText().toString();

        DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                case DialogInterface.BUTTON_POSITIVE:
                    //TODO Yes button clicked
                    this.mList.remove(position);
                    adapter.notifyDataSetChanged();
                    break;
                case DialogInterface.BUTTON_NEGATIVE:
                    //TODO No button clicked
                    dialog.dismiss();
                    break;
                }
            }
        };
        AlertDialog.Builder builder = new AlertDialog.Builder(Main.this);
        builder.setMessage("Extract " + rarListView.getItemAtPosition(arg2).toString() + " \n to '" + Environment.getExternalStorageDirectory().toString() + "/AndRar/' folder?")
            .setPositiveButton("Yes", dialogClickListener)
            .setNegativeButton("No", dialogClickListener)
            .show();
        return true;
    }
});