2017-09-17 11 views
0

ContentProviderを使用してListviewにデータを入力しています。一方、OnItemClickListener()メソッドをクリックすると、 "java.lang.stringにContentResolverをキャストできません"というエラーが表示されます。以下のアクティビティクラスに関するコードがあります。 OnItemClickListenerメソッドが正しく動作するように、コードをどのように変更できますか?OnItemClickListenerメソッドの文字列エラーにContentResolverをキャストできません

public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> { 
private ListView alarmlv; 
DBHelper mydb; 

private static final String PROVIDER_NAME = "com.domain.app.alarms"; 
private static final Uri CONTENT_URI = Uri.parse("content://" + PROVIDER_NAME + "/alarms"); 

SimpleCursorAdapter dataAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mydb = new DBHelper(this); 

    Cursor cursor = getContentResolver().query(CONTENT_URI, null, null, null, "name"); 
    alarmlv = (ListView)findViewById(R.id.listViewAlarms); 

    dataAdapter = new SimpleCursorAdapter(getBaseContext(), R.layout.listview_row, cursor, 
      new String[]{ mydb.ALARMS_COLUMN_NAME }, new int[]{R.id.alarm_name}, 0); 
    alarmlv.setAdapter(dataAdapter); 
    getSupportLoaderManager().initLoader(0, null, this); 

    alarmlv.setOnItemClickListener(new OnItemClickListener(){ 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
           long arg3) { 
      //obj.getItemAtPosition(arg2); 
      // TODO Auto-generated method stub 

      String itemVal =(String) arg0.getItemAtPosition(arg2); 

      Bundle dataBundle = new Bundle(); 
      dataBundle.putString("name", itemVal); 
      Intent intent = new 
        Intent(getApplicationContext(),DisplayAlarm.class); 
      intent.putExtras(dataBundle); 
      startActivity(intent); 
     } 
    }); 

}

ありがとうございます。

ジョセフ

答えて

1

CursorAdapterStringの要素が含まれていないので、あなたは、エラーが発生しました。それはタイプCursorの要素を含んでいます。 次のコードを試してください:

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    Cursor cursor = (Cursor) getItemAtPosition(position); 
    String itemVal = cursor.getString(cursor.getColumnIndex(mydb.ALARMS_COLUMN_NAME)); 

    Bundle dataBundle = new Bundle(); 
    dataBundle.putString("name", itemVal); 
    Intent intent = new 
      Intent(getApplicationContext(),DisplayAlarm.class); 
    intent.putExtras(dataBundle); 
    startActivity(intent); 
} 
+0

@pskink編集済み。 –

+0

ありがとうナビン!あなたのソリューションは完璧に動作します。 – JF0001

+0

@ JF0001うれしかったです。 –

関連する問題