- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
您好,我使用以下代码构建了一个对话框,可以从我的通话记录中选择一个联系人,但它只显示每个项目中的电话号码。我如何更改它以在每个项目中显示“联系人姓名”+“电话号码”?
我试过了,但 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();
}
关于android - 使用 alertdialog 构建器的 setCursor 方法显示数据库中的项目列表时如何添加多个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26522237/
我有一个 JavaFX 应用程序,我似乎无法更改其中的 Cursor,希望有人可以看看我的代码,也许可以让我知道我做错了什么。 发生的事情的基本流程: 点击按钮 执行单独的任务以从 REST API
我正在测试 java 的一个新方面,尝试为我的游戏制作自定义光标,但似乎我遇到了一个问题,在我的代码中 setCursor(); 带来了出现编译器错误,因为它不被视为正确的代码段。我遵循了教程和不同的
下面我将光标设置为“手”,但是一旦我的工具提示启动,手就会返回到原始光标,直到我移动并重新激活悬停监听器。有谁知道为什么会发生这种情况吗? nodeB.hoverProperty().addListe
我创建了一个表,并在特定列上设置了游标。首次显示表格时光标正常显示,但如果表格模型发生变化,重新绘制表格,则不会按照代码显示光标,而是在所有列上显示默认光标。 尝试调试代码,对 jtable.setc
我维护一个使用 flash ocx 播放 SWF 文件的 C++ 应用程序。 当用户将鼠标悬停在 SWF 中的按钮上时,Flash 会在内部调用 WinAPI SetCursor 函数来设置 IDC_
好的,我在循环中设置了一个光标,它可以工作,但是当我移动光标时,它只是变回原来的样子。我用的是 win32 api,我用过 SetCursor(LoadCursor(hInstance, MAKEIN
全部, 我有一个带有 setFlags(Qt::ItemIsSelectable | Qt::ItemIsMovable) 的 QGraphicsEllipseItem。这允许我在 QGraphics
JPanel panel = new JPanel(null); panel.setSize(400, 400); panel.add(new JButton("Test")); panel.setC
我正在尝试使用 AlphabetIndexer 实现快速滚动条,但是当光标发生变化时,它不会刷新索引缓存。在我的 CursorAdapter 构造函数中,我调用了 setCursor(cursor)
我正在使用 SetCursor 将系统光标设置为我自己的图像。代码看起来像这样: // member on some class HCURSOR _cursor; // at init time _c
此示例草图展示了如何使用 setCursor() 方法重新定位光标。要移动光标,只需调用带有行和列位置的 setCursor()。例如,对于 2x16 显示: lcd.setCursor(0, 0);
此示例草图展示了如何使用 setCursor() 方法重新定位光标。要移动光标,只需调用带有行和列位置的 setCursor()。例如,对于 2x16 显示: lcd.setCursor(0, 0);
我正在尝试编写一个快速简单的 C++ 程序,将光标图标更改为目录中的自定义图像。 Windows 开发中心似乎有 some fairly straightforward documentation o
您好,我使用以下代码构建了一个对话框,可以从我的通话记录中选择一个联系人,但它只显示每个项目中的电话号码。我如何更改它以在每个项目中显示“联系人姓名”+“电话号码”? 我试过了,但 builder.s
在处理 WM_SETCURSOR 窗口消息时,我将 SetCursor 调用到某个光标。如果我将光标设置为与它不同的东西,它会等到鼠标通过移动或单击获得输入以实际设置它。 有没有办法解决这个问题,使光
本文整理了Java中com.koolearn.klibrary.text.view.ZLTextWordCursor.setCursor()方法的一些代码示例,展示了ZLTextWordCursor.
在我的应用程序中,我有 Screen.Cursor := crHourGlass; Application.ProcessMessages; try ... finally Screen.Curs
我是一名优秀的程序员,十分优秀!