2015-10-09 3 views
0

Я работаю над приложением для обмена сообщениями и сделал список разговоров хорошо, но у меня проблемы с моим listview onitemclicklistner. Я бы хотел, чтобы он извлекал textview (id = lblID), конвертировал его в строку, а затем отобразил список цепочек (с этой строкой в ​​качестве идентификатора) и отобразил его в моем listview.OnItemClickListener/SimpleDateFormat

  1. Я делаю это правильно?
  2. Решеноsimplecursoradapter внутри onitemclicklistener не позволит мне использовать «это» в качестве контекста, что я должен использовать вместо этого?
  3. Я хотел бы использовать SimpleDateFormat, как бы это сделать между курсором и адаптером?
  4. решаемые Я я теперь получаю сообщение об ошибке, не кто не как исправить это ?:

    10-10 07: 45: 54.926 24231-24231 /? E/AndroidRuntime: FATAL EXCEPTION: main 10-10 07: 45: 54.926 24231-24231 /? E/AndroidRuntime: Процесс: com.example.wq.myapp, PID: 24231 10-10 07: 45: 54.926 24231-24231 /? E/AndroidRuntime: android.database.sqlite.SQLiteException: рядом с «*»: синтаксическая ошибка (код 1): при компиляции: SELECT * FROM (SELECT DISTINCT date * 1 AS normalized_date, NULL AS * FROM sms WHERE (thread_id = 37 AND (type! = 3)) UNION SELECT DISTINCT date * 1000 AS normalized_date, NULL AS * FROM pdu LEFT JOIN pending_msgs ON pdu._id = pending_msgs.msg_id WHERE (thread_id = 37 AND msg_box! = 3 AND (msg_box! = 3 AND (m_type = 128 иЛИ m_type = 132 OR m_type = 130))) ORDER BY normalized_date убыв) ORDER BY normalized_date убыв

Вот мой код:

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

Любая помощь или дополнительные знания будет будем очень благодарны. :)

ответ

0

Для 2: SimpleCursorAdapter хочет «Контекст» в качестве первого параметра. Если вы вызываете это «в свой метод OnItemClick», ваш контекст - это ваш OnItemClick.

Если вы во фрагменте, используйте getActivity(), или сделать это в OnCreate() метод:

Context mContext = getActivity(); 

и использовать mContext в new SimpleCursorAdapter(mContext, .....);

В деятельности, вы можете присвоить переменной mContext в OnCreate, как это:

Context mContext = this; 

Существуют и другие методы, такие как getApplicationContext(), которые вы можете попробовать.

+0

Огромное спасибо куче :) Я понял, что «это» возвращает OnItemClick, я просто не был уверен, как правильно получить контекст приложения :) –

 Смежные вопросы

  • Нет связанных вопросов^_^