私はカードゲームの勝者のテーブルであるシンプルなSQLiteデータベースを持っています。このテーブルには、一意のID、名前、スコア、日付、および後で使用される一連のデータ(文字列配列)の列があります。私は、リストビューからデータをクエリしてレンダリングすることができました(これは予想よりもはるかに難解でした)。ここでは、リストビュー内の項目をクリックして、文字列配列のデータを使用して別のアクティビティを開始します。しかし、私がonItemClickメソッドに入ると、getItemは常にnullを返します。クリックしたときのAndroidのListViewのコンテンツはnullです
public class NewHoFListViewActivity extends Activity {
DBHelper dbHelper;
Cursor cursor;
NewHoFListAdapter ListAdapter ;
ArrayList<String> ID_ArrayList = new ArrayList<>();
ArrayList<String> nameArrayList = new ArrayList<>();
ArrayList<String> scoreArrayList = new ArrayList<>();
ArrayList<String> dateArrayList = new ArrayList<>();
ListView myListView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_hof_list_view);
myListView = (ListView) findViewById(R.id.listView1);
dbHelper = new DBHelper(this);
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String item = (String) parent.getAdapter().getItem(position);
// Get the cursor, positioned to the corresponding row in the result set
//Cursor cursor = (Cursor) myListView.getItemAtPosition(position);
// Get the data from this row in the database.
//String name = cursor.getString(cursor.getColumnIndexOrThrow("name"));
Toast.makeText(getApplicationContext(),
item, Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onResume() {
ShowSQLiteDBdata() ;
super.onResume();
}
private void ShowSQLiteDBdata() {
ID_ArrayList.clear();
nameArrayList.clear();
scoreArrayList.clear();
dateArrayList.clear();
cursor = dbHelper.getWritableDatabase().rawQuery("SELECT * FROM winners", null);
if (cursor.moveToFirst()) {
do {
ID_ArrayList.add(cursor.getString(cursor.getColumnIndex(DBHelper.WINNERS_COLUMN_ID)));
nameArrayList.add(cursor.getString(cursor.getColumnIndex(DBHelper.WINNERS_COLUMN_NAME)));
scoreArrayList.add(cursor.getString(cursor.getColumnIndex(DBHelper.WINNERS_COLUMN_SCORE)));
dateArrayList.add(cursor.getString(cursor.getColumnIndex(DBHelper.WINNERS_COLUMN_DATE)));
} while (cursor.moveToNext());
}
ListAdapter = new NewHoFListAdapter(NewHoFListViewActivity.this,
ID_ArrayList,
nameArrayList,
scoreArrayList,
dateArrayList
);
myListView.setAdapter(ListAdapter);
cursor.close();
}
}
私は私が試した他のアプローチに残してきた(コメントアウト);:ここではクラスがあります両方(項目とカーソル)はnullを返します。どんな助けもありがとう!
問題は、listViewを初期化しましたが、アダプタを設定せず、itemClickListener ... call ShowSQLiteDBdata();リストビューを初期化した後 –
ありがとうございました - それは私の一部の児童のエラーでした...それをキャッチしていただきありがとうございます。今、私がString item =(String)を呼び出すと、parent.getItemAtPosition(position).toString();が呼び出されます。行インデックスを表す整数を返します。その行に含まれるデータにアクセスするにはどうすればよいですか? – newps
このオブジェクトのような項目を取得するobj = myListView.getAdapter()。getItem(position);このオブジェクトを文字列で取得します。String strObj = obj.toString();これを試してみてください。私が答えを投稿してからそれを受け入れることができたら:) –