【问题标题】:display a dialog after long click on list view android长按列表视图android后显示一个对话框
【发布时间】:2012-06-19 06:08:39
【问题描述】:

在我的应用程序中,我将从游标中获取数据并将其放入 ListActivity。

如果长按列表项,它应该会显示一个对话框。

现在我给你看一些代码:

final ListView selectRoom = (ListView) findViewById(android.R.id.list);
        selectRoom.setOnItemLongClickListener(new OnItemLongClickListener() {

            public boolean onItemLongClick(AdapterView<?> adapter, View view,
                    int position, long id) {

                Cursor unitCursor = (Cursor) getListView().getItemAtPosition(
                        position);
                int rid = unitCursor.getInt(0);
                DBAccessor dba = new DBAccessor(getApplicationContext());
                dba.alterUnitName(rid);
                callAdapter();
                final Dialog d = new Dialog(getApplicationContext());
                d.setContentView(R.layout.settings);
                d.setTitle("My Dialog");
                d.show();

                return true;

这是带有列表的 XML 文件...

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Spinner
        android:id="@+id/spinnerRooms"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </Spinner>

    <ListView
        android:id="@android:id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:layout_below="@id/spinnerRooms">
    </ListView>

</RelativeLayout>

光标所在列的XML文件是...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/unitId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:visibility="invisible"/>

    <TextView
        android:id="@+id/unitName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/unitRoomId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:visibility="invisible"/>

</LinearLayout>

感谢您的回答,祝您有愉快的一天。

【问题讨论】:

    标签: android listview dialog onlongclicklistener


    【解决方案1】:

    使用 setOnItemLongClickListener 如下..

     selectRoom.setOnItemLongClickListener(new OnItemLongClickListener(){
            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    int position, long arg3) {
                // TODO Auto-generated method stub
                Dialog();
      or 
    final MyDialog rDialog=new MyDialog(this,this);
                return false;
            }
    
        } );
    
    public void Dialog()    {
    
            AlertDialog.Builder dialogAlert = new AlertDialog.Builder(getApplicationContext());
            dialogAlert.setTitle("Demo ?");
    
            dialogAlert.show();
    }
    
     //Another way
    
     public class MyDialog extends Dialog {
    
    Activity act;
    public ReminderSettingDialog(Context context,Activity act) {
        super(context);
        this.act=act;
        // TODO Auto-generated constructor stub
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.settings);
    
    }
    

    }

    【讨论】:

    • 他已经分配了setOnItemLongClickListener。这个答案有什么新的吗?
    • 可以单独创建MyDialog类,在ListActivity中使用MyDialog对象
    【解决方案2】:

    试试这个代码:

    selectRoom.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) {
                return onLongListItemClick(v,pos,id);
            }
            protected boolean onLongListItemClick(View v, final int pos, long id) {
                /////Display Dialog Here.......................
    
                        return true;
    
        });
    

    【讨论】:

    • onLongListItemClick()方法不可用
    【解决方案3】:

    应该使用这样的对话框构建器来构建对话框:

    AlertDialog alertDialog = new AlertDialog.Builder(view.getContext()).create();
    alertDialog.setTitle("Reset...");
    alertDialog.setMessage("Are you sure?");
    alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
       public void onClick(DialogInterface dialog, int which) {
          // here you can add functions
       }
    });
    alertDialog.setIcon(R.drawable.icon);
    alertDialog.show();
    

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 2013-03-23
      • 2011-08-05
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      相关资源
      最近更新 更多