2016-09-17 5 views
0

私はカードゲームの勝者のテーブルであるシンプルな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を返します。どんな助けもありがとう!

+0

問題は、listViewを初期化しましたが、アダプタを設定せず、itemClickListener ... call ShowSQLiteDBdata();リストビューを初期化した後 –

+0

ありがとうございました - それは私の一部の児童のエラーでした...それをキャッチしていただきありがとうございます。今、私がString item =(String)を呼び出すと、parent.getItemAtPosition(position).toString();が呼び出されます。行インデックスを表す整数を返します。その行に含まれるデータにアクセスするにはどうすればよいですか? – newps

+0

このオブジェクトのような項目を取得するobj = myListView.getAdapter()。getItem(position);このオブジェクトを文字列で取得します。String strObj = obj.toString();これを試してみてください。私が答えを投稿してからそれを受け入れることができたら:) –

答えて

0

parent.getItemAtPosition(位置)メソッド

myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, 
            long id) { 

       String item = (String) parent.getItemAtPosition(position); 


      } 
     }); 
+0

クイック返信ありがとう!私はそれを試して、項目はまだ残念ながらヌルです... – newps

0

あなたのアダプタNewHoFListAdapterクラスの "のgetItem()" メソッドからご希望の "文字列" のオブジェクトを返していることを確認してください。

+0

ありがとう....それはデフォルトとしてヌルを返していました....私はUIの仕事に新しいデバイスドライバの男だから、私はまだここでランプアップしています。どのようにしてこのメ​​ソッドで必要な値を返すようにDBからデータを正しくフォーマットするのですか? – newps

+0

「return nameArraylist.get(position);」と記述します。あなたのアダプタ(NewHoFListAdapter)の "getItem()"メソッドで。 –

関連する問題