我有一个包含特定数据的RecyclerView,每个recyclerView项目都有一个启动第二个活动的按钮。 在第二个活动中,它应显示单击按钮的特定项目的值。 这里的问题是当我从位置0的项目按下按钮时,我有正确的值,但是当我按下位置1的按钮时,我从位置0得到值:
位置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 :(得分: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();
答案 1 :(得分:0)
从您的活动类中的回收站视图对象中调用sethasstableids(true)
。
setHasStableIds 是您可以提供给回收商的优化提示。你告诉它“当我提供ViewHolder时,它的id是唯一的,不会改变。”
答案 2 :(得分:0)
使你的项类重写equals和hashcode contract。
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();
}
}