RecyclerView从上一个位置

时间:2016-12-15 03:33:43

标签: java android android-activity android-recyclerview

我有一个包含特定数据的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);

    }
}

我不知道自己做错了什么,如果你需要更多的代码,请不要犹豫。 谢谢你和问候!

3 个答案:

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

}