android – 当使用alertdialog builder的setCursor方法显示数据库中的项列表时,如何添加多个列?

嗨我使用以下代码构建了一个对话框,可以从我的通话记录中选择一个联系人,但它只显示每个项目中的电话号码.如何更改它以在每个项目中显示“联系人姓名”“电话号码”?

我试过但似乎builder.setCursor()方法只允许我添加一列,我怎么能添加多个列?谢谢!

public class MainActivity extends Activity {
    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button btnPick = (Button) findViewById(R.id.btnPick);
    btnPick.setonClickListener(new OnClickListener() {
        public void onClick(View v) {
            String[] strFields = { android.provider.CallLog.Calls._ID,
                    android.provider.CallLog.Calls.NUMBER,
                    android.provider.CallLog.Calls.CACHED_NAME, };
            String strOrder = android.provider.CallLog.Calls.DATE + " DESC";
            final Cursor cursorCall = getContentResolver().query(
                    android.provider.CallLog.Calls.CONTENT_URI, strFields,
                    null, null, strOrder);

            AlertDialog.Builder builder = new AlertDialog.Builder(
                    MainActivity.this);
            builder.setTitle("Select recent contact");
            android.content.DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialogInterface,
                        int item) {
                    cursorCall.movetoPosition(item);
                    Toast.makeText(
                            MainActivity.this,
                            cursorCall.getString(cursorCall
                                    .getColumnIndex(android.provider.CallLog.Calls.NUMBER)),
                            Toast.LENGTH_LONG).show();
                    cursorCall.close();
                    return;
                }
            };
            builder.setCursor(cursorCall, listener,
                    android.provider.CallLog.Calls.NUMBER);
            builder.create().show();
        }
    });
}

}

解决方法:

这是我的解决方案.您可以修改修改它.

public void getCallLog() {

    String[] callLogFields = { CallLog.Calls._ID,
            CallLog.Calls.NUMBER,
            CallLog.Calls.CACHED_NAME,
            CallLog.Calls.DATE};
    String ORDER = CallLog.Calls.DATE + " DESC";
    String WHERE = CallLog.Calls._ID + " IN (SELECT " + CallLog.Calls._ID + " FROM calls GROUP BY " + CallLog.Calls.NUMBER + ")";


    Cursor cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, callLogFields, WHERE, null, ORDER);
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);



    if(cursor == null || !cursor.movetoFirst()) return;
    final List<Map<String, String>> data = new ArrayList<>();
    do
    {

        long time = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE));

        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm", Locale.getDefault());
        Date resultdate = new Date(time);
        String date = sdf.format(resultdate);
        String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
        String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));

        Map<String, String> map = new HashMap<>(4);
        map.put("number", number);
        map.put("name", name);
        map.put("visible_name", name == null ? number : name);
        map.put("date", date);
        data.add(map);
    } while (cursor.movetoNext());
    if(!cursor.isClosed()) cursor.close();

    DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialogInterface, int item) {
            String number = data.get(item).get("number");
            Log.v("dva.re.number", number);
        }
    };

    SimpleAdapter adapter = new SimpleAdapter(this, data,
            android.R.layout.simple_list_item_2,
            new String[] {"visible_name", "date"},
            new int[] {android.R.id.text1,
                    android.R.id.text2,
            });
    dialogBuilder.setAdapter(adapter, listener);
    dialogBuilder.setTitle("Choose from Call Log");
    dialogBuilder.create().show();
}

相关文章

SQLite架构简单,又有Json计算能力,有时会承担Json文件/RES...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器...
安卓开发,利用SQLite实现登陆注册功能