我正在开发一款即时通讯应用程序,并已将对话列表显示得很好,但我的listview onitemclicklistner却有问题。我希望它检索一个textview (id=lblID),将它转换为一个字符串,然后显示会话列表(以该字符串作为id),并在我的listview中显示它。
onitemclicklistener中的simplecursoradapter不允许我使用"this“作为上下文,我应该使用什么呢?SimpleDateFormat,我将如何在游标和适配器之间这样做?这是我的代码:
@Override
public void onClick(View v) {
if (v == btnSMS) {
// Create Inbox box URI
Uri inboxURI = Uri.parse("content://mms-sms/conversations");
// Get Content Resolver object, which will deal with Content Provider
ContentResolver cr = getContentResolver();
// Fetch Inbox SMS Message from Built-in Content Provider
Cursor a = cr.query(inboxURI, new String[] {"*"}, null, null, "normalized_date desc");
// Attach Cursor with adapter and display in listView
adapter1 = new SimpleCursorAdapter(this, R.layout.row, a,
new String[]{ "body", "date", "address","_id"},
new int[]{ R.id.lblMsg, R.id.lblDate, R.id.lblNumber, R.id.lblID }, 0);
lvMsg.setAdapter(adapter1);
lvMsg.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView TVConvID = (TextView)findViewById(R.id.lblID);
String ConvID = TVConvID.getText().toString();
Uri ConvURI = Uri.parse("content://mms-sms/conversations/"+ConvID);
Cursor b = getContentResolver().query(ConvURI, new String[]{"*"}, null, null, "normalized_date desc");
adapter2 = new SimpleCursorAdapter(getApplicationContext(), R.layout.convrow, b,
new String[]{ "body", "date", "address" },
new int[]{ R.id.msglblMsg, R.id.msglblDate, R.id.msglblNumber }, 0);
lvMsg.setAdapter(adapter2);
}
});
}任何帮助或额外的知识将不胜感激。:)
发布于 2015-10-09 11:04:49
对于2: SimpleCursorAdapter希望'Context‘作为第一个参数。如果在OnItemClick方法中调用“this”,那么上下文就是OnItemClick。
如果您在一个片段中,使用getActivity(),或者在您的onCreate()方法中这样做:
Context mContext = getActivity();并使用mContext作为new SimpleCursorAdapter(mContext, .....);
在活动中,可以将变量mContext在onCreate中赋值如下:
Context mContext = this;还有其他方法,如getApplicationContext(),您可以尝试。
https://stackoverflow.com/questions/33036426
复制相似问题