2016-06-14 6 views
0

データベースからデータが読み込まれたListViewを持つアクティビティ(MainWordsActivity)があります。そのアイテムの1つがクリックされたときに、そのデータベースの行とListViewの位置を別のアクティビティ(DetailActivity) 。 DetailActivityの次のボタンもあります。クリックするたびに、ListViewの次の項目を同じアクティビティと表示にします。私がしたいのは、nextButtonがクリックされた後にListviewに次の項目を表示することです。 次のアイテムにアクセスするにはどうすればよいですか?または、この目的を達成するためにCursorを使用することは可能ですか? おかげ次のアイテム、nextButton、

MainWordsActivity

private ArrayList<Word> testing; 
@Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 

     ArrayList<Word> result = new ArrayList<Word>(); 

     Word word = testing.get(position); 
     Intent intent = new Intent(this, DetailActivity.class); 

     Bundle extras = new Bundle(); 
     extras.putInt("pos", position); 

     extras.putParcelable(".model.Word", word); 
     intent.putExtras(extras); 
     startActivity(intent); 

    } 

DetailActivity

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

     Intent intent = getIntent(); 
     Bundle extras = intent.getExtras(); 
     pos = extras.getInt("pos"); 

     word = extras.getParcelable(".model.Word"); 

     refreshDisplay(); 
enter code here 
     Button butNext = (Button) findViewById(R.id.nextBut); 

     butNext.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       pos ++; 


     ??? 

} 

}); 
} 

答えて

0

私はこれを達成するための最良の方法は、DetailActivityWordオブジェクトの配列と同様にposを渡すことだと思います。

WordParcelableオブジェクトであるので、あなたはBundleArrayListtesting全体を入れてputParcelableArrayList()を使用することができます。これを試してみてください:

MainWordsActivity

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 

    Intent intent = new Intent(this, DetailActivity.class); 

    Bundle extras = new Bundle(); 
    extras.putInt("pos", position); 
    extras.putParcelableArrayList(".model.Word", testing); 

    intent.putExtras(extras); 

    startActivity(intent); 

} 

そして、あなたのDetailActivityに:

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

    Intent intent = getIntent(); 
    Bundle extras = intent.getExtras(); 
    pos = extras.getInt("pos"); 

    ArrayList<Word> words = extras.getParcelableArrayList(".model.Word"); 
    word = words.get(pos); 

    refreshDisplay(); 

    Button butNext = (Button) findViewById(R.id.nextBut); 
    butNext.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      pos++; 
      word = words.get(pos); // get the next word from the list 

      refreshDisplay(); // I am assuming this updates the UI 
      /* ANY OTHER UI CHANGES CAN GO HERE */ 
     } 
    }); 
} 

これはあなたが望むものを達成する必要があります。 refreshDisplay()はUIを更新すると仮定していますが、そうでない場合は、新しいwordに基づいてUIを更新する場所です。あなたがあるように思わなかったので、あなたのMainWordsActivityから

ArrayList<Word> result = new ArrayList<Word>();

:あなたはまた、私はこの行を削除し、さらになど、あなたのArrayList上の境界の外に行かないことを確認する

をチェックする必要がありますそれをまったく使用しています。

+0

ありがとうございました! –

+0

@ M.mrzaieうれしい私は助けることができました! – omkarmoghe

関連する問題