2016-12-15 54 views
0

我有一個RecyclerView與某些數據,並且每個recyclerView項目都有一個啓動第二個活動的按鈕。 在第二個活動中,它應該顯示點擊按鈕的特定項目的值。 這裏的問題是,當我從位置0的項目按下按鈕時,我有正確的值,但是當我按下位置​​1的按鈕時,我從位置0得到值:RecyclerView從最後位置檢索數據

按鈕在位置2 - 從位置顯示值1

在3位上鍵 - 從位置顯示值2

按鈕在位置4 - 從位置3

等顯示值...

釷是是我填充ViewHolder()方法和onClick事件:

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:

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); 

    } 
} 

我不知道我做錯了什麼如果你需要更多的代碼,請不要猶豫。 謝謝你,問候!

+0

RecyclerView與ListViews在幾個方面有所不同,但也許最明顯的區別是它處理視圖的方式。視圖持有人和其中包含的內容有一些警告。一旦它們在等待被渲染的另一行關閉屏幕時,視圖就被重新使用。您可以在調試模式或日誌記錄中監視此。您的'適配器'代碼發佈到 –

+0

。 –

回答

1

更換

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(); 

隨着你的活動類

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

您應該解釋爲什麼您需要進行這些更改,以及*爲什麼*'position0'值正在加載而不是'position1' –

0

呼叫sethasstableids(true)從回收查看oject。

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(); 
    } 

} 
相關問題