有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java OnItemClickListener/SimpleDataFormat

我正在开发一个消息应用程序,并已使对话列表显示良好,但我的listview onitemclicklistner有问题。我希望它检索一个textviewid=lblID),将其转换为一个字符串,然后显示对话列表(以该字符串作为id),并将其显示在我的listview

  1. 我这样做对吗
  2. 已解决onitemclicklistener中的simplecursoradapter不允许我使用“this”作为上下文,我应该使用什么
  3. 我想使用SimpleDateFormat,如何在游标和适配器之间执行此操作
  4. 已解决我现在遇到一个错误,是否有人不知道如何修复此错误:

    10-10 07:45:54.92624231-24231/?E/AndroidRuntime:致命异常:主 10-10 07:45:54.926 24231-24231/? E/AndroidRuntime:Process:com。实例wq。myapp,PID:24231 10-10 07:45:54.926 24231-24231/? E/AndroidRuntime:安卓。数据库sqlite。SQLiteException:near“*”:语法错误(代码1):,编译时:选择*FROM(选择不同的日期*1作为标准化的\u日期,从sms中选择NULL作为*,其中(thread\u id=37和(type!=3))UNION选择不同的日期*1000作为标准化的\u日期,从pdu上的左连接挂起的\u MSG选择NULL作为*_id=挂起的\u msgs。msg_id其中(thread_id=37和msg_box!=3和(msg_box!=3和(m_type=128或m_type=132或m_type=130)))按规范化日期描述排序(按规范化日期描述排序)

这是我的密码:

@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);
            }
        });
    }

任何帮助或额外知识都将不胜感激。:)


共 (1) 个答案

  1. # 1 楼答案

    对于2: SimpleCursorAdapter希望“Context”作为第一个参数。如果在OnItemClick方法中调用“this”,则上下文就是OnItemClick

    如果在片段中,请使用getActivity(),或者在onCreate()方法中执行此操作:

    Context mContext = getActivity();
    

    使用mContext作为new SimpleCursorAdapter(mContext, .....);

    在“活动”中,可以在onCreate中指定变量mContext,如下所示:

    Context mContext = this;
    

    还有其他方法,比如getApplicationContext(),你可以试试