• 长按listview弹出选项列表对话框


    Android中通过xml资源文件定义数组。来自微风的网络日志。

    文章链接:http://leybreeze.com/blog/?p=1524

    Android ListView两种长按弹出菜单方式

    http://www.eoeandroid.com/thread-173294-1-1.html

    完全自定义Android对话框AlertDialog的实现

    在values目录下创建arrays.xml文件。


    Builder android.app.AlertDialog.Builder.setItems(int itemsId, OnClickListener listener)

    Set a list of items to be displayed in the dialog as the content, you will be notified of the selected item via the supplied listener. This should be an array type i.e. R.array.foo

    Returns: This Builder object to allow for chaining of calls to set methods


    Activity实现接口AdapterView.OnItemLongClickListener。

    listView设置Listener。

    mListView.setOnItemLongClickListener(this);

    Activity实现接口方法onItemLongClick。

    public boolean onItemLongClick(AdapterView<?> parent, View view,
            int position, long id) {
        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
        TxrjThreads thread = mThreads.get(position);
        builder.setTitle(thread.getName());
        builder.setItems(R.array.thread_menu, new DialogInterface.OnClickListener() {
           
            @Override
            public void onClick(DialogInterface dialog, int which) {
               
            }
        });
        builder.show();
        return false;
    }

    在values/arrays.xml文件中定义thread_menu字符串数组。

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="thread_menu">
            <item >Call</item>
            <item >Edit And Call</item>
            <item >Remove</item>
        </string-array>
    </resources>

    在代码中获取数组内容。

    String[] sa = getResources().getStringArray(R.array.thread_menu);

    如果是多选,那么就将代码中蓝色部分替换为以下代码判断。

    boolean[] checkedItems = {true, false, true};
    builder.setMultiChoiceItems(R.array.thread_menu, checkedItems,
            new DialogInterface.OnMultiChoiceClickListener() {
       
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
        }
    });

    实现:拨号,拨号前编辑,删除会话。

    当删除会话成功之后,contentObserver会观察到数据发生变化,然后会自动更新UI。

    builder.setItems(R.array.thread_menu, new DialogInterface.OnClickListener() {
       
        @Override
        public void onClick(DialogInterface dialog, int which) {
            switch(which){
            case TxrjConstant.MENU_THREAD_CALL:
                Intent itCall = new Intent(Intent.ACTION_CALL,
                        Uri.parse("tel:" + thread.getNumber()));

                startActivity(itCall);
                break;
            case TxrjConstant.MENU_THREAD_EDIT_AND_CALL:
                Intent itDial = new Intent(Intent.ACTION_DIAL,
                        Uri.parse("tel:" + thread.getNumber()));

                startActivity(itDial);
                break;
            case TxrjConstant.MENU_THREAD_REMOVE:
                getContentResolver().delete(Sms.CONTENT_URI,
                        "thread_id="+thread.getThreadId(), null);

                break;
            }
        }
    });

    拨号时出现错误,需要添加权限。
    07-19 12:03:16.395: E/AndroidRuntime(5557): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxxxxxx cmp=com.android.phone/.OutgoingCallBroadcaster } from ProcessRecord{41744578 5557:com.txrj.sms/10110} (pid=5557, uid=10110) requires android.permission.CALL_PHONE

    在Manifest.xml文件中添加授权即可。

    <uses-permission android:name="android.permission.CALL_PHONE" />

    在删除会话之前需要确定一下,避免误删操作发生。

    确认对话框使用自定义的ConfirmActivity。在跳转之前设置message。

    case TxrjConstant.MENU_THREAD_REMOVE:
        Intent itRemove = new Intent(mContext, ConfirmActivity.class);
        itRemove.putExtra("message", "delete conversation?");
        startActivityForResult(itRemove, TxrjConstant.REQUEST_REMOVE_THREAD);

        break;
    }

    在onActivityResult()方法中处理删除操作。

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == TxrjConstant.REQUEST_REMOVE_THREAD &&
                resultCode == RESULT_OK) {
            getContentResolver().delete(Sms.CONTENT_URI,
                    "thread_id="+curThread.getThreadId(), null);
        }
    }


    将对话框标题居中,以及修改对话框编辑的背景颜色。

    参考:自定义 Android 对话框 (AlertDialog) 的样式

    http://www.open-open.com/lib/view/open1325635738437.html

    LYBUF7$VI_][4E$`5HLUBXT

  • 相关阅读:
    HDU.2087 剪花布条
    一个acm过来人的心得
    一个acm过来人的心得
    HDU.2190 悼念512汶川大地震遇难同胞——重建希望小学
    HDOJ.2501 Tiling_easy version
    HDOJ.2501 Tiling_easy version
    HDU
    poj3216 Prime Path(BFS)
    poj1426 Find The Multiple (DFS)
    Rikka with Nickname (简单题)
  • 原文地址:https://www.cnblogs.com/fengzhblog/p/3200253.html
Copyright © 2020-2023  润新知