2013-08-13 1 views
0

Я искал stackoverflow для подобных вопросов. Ни одно из решений, похоже, не работает.SimpleCursorAdapter не возвращает позицию

Это мой класс CustomAdapter.

public class ContactAdapter extends SimpleCursorAdapter { 

Context cont; 

public ContactAdapter(Context context, int layout, Cursor c, String[] from, 
     int[] to) { 
    super(context, layout, c, from, to, 0); 
    cont = context; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View view = super.getView(position, convertView, parent); 

    Button button = (Button)view.findViewById(R.id.delete_button); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override public void onClick(View v) { 
      Toast.makeText(cont, position, 
        Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    return view; 
} 
} 

В соответствии с документами я должен получить позицию текущего предмета в тосте. Но это исключает следующие исключения.

08-13 13:46:01.904: E/AndroidRuntime(5980): android.content.res.Resources$NotFoundException: String resource ID #0x0 
08-13 13:46:01.904: E/AndroidRuntime(5980):  at android.content.res.Resources.getText(Resources.java:265) 
08-13 13:46:01.904: E/AndroidRuntime(5980):  at android.widget.Toast.makeText(Toast.java:265) 
08-13 13:46:01.904: E/AndroidRuntime(5980):  at com.example.databaseproject.ContactAdapter$1.onClick(ContactAdapter.java:34) 
08-13 13:46:01.904: E/AndroidRuntime(5980):  at android.view.View.performClick(View.java:4091) 
08-13 13:46:01.904: E/AndroidRuntime(5980):  at android.view.View$PerformClick.run(View.java:17072) 
08-13 13:46:01.904: E/AndroidRuntime(5980):  at android.os.Handler.handleCallback(Handler.java:615) 
08-13 13:46:01.904: E/AndroidRuntime(5980):  at android.os.Handler.dispatchMessage(Handler.java:92) 
08-13 13:46:01.904: E/AndroidRuntime(5980):  at android.os.Looper.loop(Looper.java:153) 
08-13 13:46:01.904: E/AndroidRuntime(5980):  at android.app.ActivityThread.main(ActivityThread.java:5034) 
08-13 13:46:01.904: E/AndroidRuntime(5980):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-13 13:46:01.904: E/AndroidRuntime(5980):  at java.lang.reflect.Method.invoke(Method.java:511) 
08-13 13:46:01.904: E/AndroidRuntime(5980):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821) 
08-13 13:46:01.904: E/AndroidRuntime(5980):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 
08-13 13:46:01.904: E/AndroidRuntime(5980):  at dalvik.system.NativeStart.main(Native Method) 

Помогите пожалуйста.

ответ

4

Проблема заключается в том, что position является int и Toast.makeText. Второй параметр метода метода (если он является int) должен быть идентификатором ресурса. Итак, здесь нет ресурсов с идентификатором position, и вы получите Resources$NotFoundException

Как это исправить?

Просто бросьте нанизывать на position + ""

использовать этот код

button.setOnClickListener(new View.OnClickListener() { 
     @Override public void onClick(View v) { 
      Toast.makeText(cont, position+"", 
        Toast.LENGTH_SHORT).show(); 
     } 
    }); 
+0

Спасибо. Моя глупая ошибка. – aBhijit

1

Я думаю, что вы сдали int значения в Toast, что приводит к исключению

изменения вашей Toast следующей. .

Toast.makeText(cont, String.valueOf(position),Toast.LENGTH_SHORT).show();