2016-12-15 13 views
0

私はRecyclerViewに特定のデータを持ち、各recyclerViewアイテムには2番目のアクティビティを開始するボタンがあります。 2番目のアクティビティでは、ボタンがクリックされた特定のアイテムの値が表示されます。 ここでの問題は、位置0の項目のボタンを押したときに正しい値が得られるが、位置1のボタンを押すと、位置0の値が得られるということです。RecyclerViewは最後の位置からデータを取得します

ボタン2 - 4位の位置2から表示値が

ボタン - - 表示位置から値3

など...

番目3の位置1

ボタンから表示値

public class DetailsActivity extends AppCompatActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_details); 

     Intent intent=getIntent(); 
     String mLatitude = intent.getStringExtra(MainActivity.EXTRA_LATITUDE); 
     String mLongitude = intent.getStringExtra(MainActivity.EXTRA_LONGITUDE); 

     TextView latitude = (TextView) findViewById(R.id.latitude_detail); 
     TextView longitude = (TextView) findViewById(R.id.longitude_detail); 

     latitude.setText(mLatitude); 
     longitude.setText(mLongitude); 

    } 
} 

私は私が間違ってやっているのか分からない:

protected void populateViewHolder(PicturesHolder viewHolder, Pictures model, final int position) { 

       viewHolder.setImage(model.getDownloadURL()); 
       viewHolder.setLatitude(model.getLatitude()); 
       viewHolder.setLongitude(model.getLongitude()); 
       viewHolder.setDateView(model.getDate()); 

       viewHolder.imageButtonView.setOnClickListener(new View.OnClickListener(){ 
        @Override 
        public void onClick(View view){ 
         Toast.makeText(view.getContext(), "Launching second activity", Toast.LENGTH_SHORT).show(); 
         Intent intent = new Intent(view.getContext(),DetailsActivity.class); 
         TextView latitude = (TextView) findViewById(R.id.latitude); 
         TextView longitude = (TextView) findViewById(R.id.longitude); 
         String latitude_details = latitude.getText().toString(); 
         String longitude_details = longitude.getText().toString(); 
         intent.putExtra(EXTRA_LATITUDE,latitude_details); 
         intent.putExtra(EXTRA_LONGITUDE,longitude_details); 
         startActivity(intent); 
        } 
       }); 
      } 

これは、データが表示されSecondActivityがある:私はViewHolderを(移入法)とonClickイベントです、あなたがより多くのコードを必要とするならば、尋ねるのをためらうことはありません。 ありがとうございました!

+0

RecyclerViewはいくつかの点でListViewと異なりますが、もっとも明らかな違いは、ビューを扱う方法です。ビュー所有者とその中に含まれるコンテンツには警告があります。ビューはレンダリングされるのを待っている別の行によってスクリーンから離れたらすぐに再利用されます。これはデバッグモードまたはロギングで監視できます。 –

+0

あなたの 'アダプタ'コードを投稿してください。 –

答えて

1

は、あなたの活動のクラスで自分のリサイクル業者の表示ojectから

String latitude_details = model.getLatitude(): 
String longitude_details = model.getLongitude(); 
+0

あなたはなぜこれらの変更を行う必要があるのか​​を説明し、 'position1'の代わりに*なぜ* position0'の値が読み込まれているのかを説明してください。 –

0

コールsethasstableids(true)

TextView latitude = (TextView) findViewById(R.id.latitude); 
TextView longitude = (TextView) findViewById(R.id.longitude); 
String latitude_details = latitude.getText().toString(); 
String longitude_details = longitude.getText().toString(); 

を交換してください。

setHasStableIdsはリサイクラーに与えることができる最適化のヒントです。あなたが「ViewHolderを提供するとき、そのIDは一意であり、変更されません」と言っています。

0

あなたのアイテムクラスを等価とハッシュコードの契約をオーバーライドさせます。

public abstract class BaseListItem { 

    protected int mListItemType; 

    public BaseListItem(int itemType) { 
     mListItemType = itemType; 
    } 

    public int getListItemType() { 
     return mListItemType; 
    } 

    public abstract long getId(); 

    @Override 
    public boolean equals(Object o) { 
     if (!(o instanceof BaseListItem)) { 
      return false; 
     } 

     BaseListItem otherListItem = (BaseListItem) o; 
     return otherListItem.getId() == getId(); 
    } 

    @Override 
    public int hashCode() { 
     Long id = getId(); 
     return id.hashCode(); 
    } 

} 
関連する問題