我想在屏幕方向改变时保留 RecyclerView 所选项目的状态,但每当我更改方向时,所选项目不会保留其状态。
所以我保存所选项目的位置和方向变化onResume()
.
我获取了位置,并通过使用 RecyclerView 的 getChildAt() 方法尝试获取该项目的视图,但它返回 null。
我遇到了严重的麻烦,请帮助。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
SelectedMyPosition= savedInstanceState.getInt("selectedItemPosition");
check=savedInstanceState.getString("demo");
}
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
objectRecyclerView = (RecyclerView) findViewById(R.id.RecyclerView);
objectRecyclerView.setHasFixedSize(true);
objectRecyclerView.setItemAnimator(new DefaultItemAnimator());
mAdapter = new MyAdapter(TITLES, ICONS, NAME, EMAIL, PROFILE, this,SelectedMyPosition);
mlayoutmanager = new LinearLayoutManager(this);
objectRecyclerView.setLayoutManager(mlayoutmanager);
objectRecyclerView.setAdapter(mAdapter);
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (SelectedMyPosition >= 0) {
View v=objectRecyclerView.getChildAt(SelectedMyPosition);
if(v!=null)
{
v.setSelected(true);
}
View lay=mlayoutmanager.getChildAt(SelectedMyPosition);
Toast.makeText(getApplicationContext(), "htrfgrg" + SelectedMyPosition+check+v+lay,
Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stubel
outState.putInt("selectedItemPosition", SelectedPosition);
outState.putString("demo", "honey");
super.onSaveInstanceState(outState);
}
适配器类:
public class MyAdapter extends Adapter<MyAdapter.ViewHolder> {
private String[] mTitles;
private int[] mIcons;
private String mName;
private String mEmail;
private int mProfile;
private static final int TYPE_ITEM = 1;
private static final int TYPE_HEADER = 0;
static Context c;
int selectedpos;
ViewGroup mrecycerView;
View old;
static int count=0;
/* View Holder Class Start */
public class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener {
int Holderid;
TextView textView;
ImageView imageView;
ImageView profile;
TextView Name;
TextView email;
Context mcontext;
public ViewHolder(View itemView, int viewType,Context con) {
// TODO Auto-generated constructor stub
super(itemView);
mcontext=con;
itemView.setOnClickListener(this);
if (viewType == TYPE_HEADER) {
Name = (TextView) itemView.findViewById(R.id.name);
email = (TextView) itemView.findViewById(R.id.email);
profile = (ImageView) itemView.findViewById(R.id.circleView);
Holderid = 0;
} else if (viewType == TYPE_ITEM) {
textView = (TextView) itemView.findViewById(R.id.rowText);
imageView = (ImageView) itemView.findViewById(R.id.rowIcon);
Holderid = 1;
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(count>0 && old!=null)
{
old.setSelected(false);
}
old=v;
v.setSelected(true);
count++;
MainActivity.getPositionOfItem(getLayoutPosition(),v);
Intent i = new Intent(mcontext.getApplicationContext(),NewActivity.class);
mcontext.startActivity(i);
Activity activity = (Activity)mcontext;
activity.overridePendingTransition(R.anim.pull_in_from_left, R.anim.hold);
Toast.makeText(MyAdapter.c,"hiji" + getLayoutPosition(), Toast.LENGTH_SHORT).show();
}
}
/* View Holder Class End */
public MyAdapter(String[] tITLES, int[] iCONS, String nAME, String eMAIL,
int pROFILE, Context applicationContext,int selectedPos) {
// TODO Auto-generated constructor stub
mTitles = tITLES;
mIcons = iCONS;
mName = nAME;
mEmail = eMAIL;
mProfile = pROFILE;
c=applicationContext;
this.selectedpos=selectedPos;
}
@Override
public int getItemCount() {
// TODO Auto-generated method stub
return mTitles.length -2;
}
@Override
public int getItemViewType(int position) {
// TODO Auto-generated method stub
if (position == 0) {
return TYPE_HEADER;
} else {
return TYPE_ITEM;
}
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if(position==selectedpos)
{
}
if (holder.Holderid == 0) {
holder.profile.setImageResource(mProfile);
holder.Name.setText(mName);
holder.email.setText(mEmail);
} else if (holder.Holderid == 1) {
holder.textView.setText(mTitles[position -1 ]);
holder.imageView.setImageResource(mIcons[position -1 ]);
}
// TODO Auto-generated method stub
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// TODO Auto-generated method stub
mrecycerView=parent;
if (viewType == TYPE_HEADER) {
View v = LayoutInflater.from(parent.getContext()).inflate(
R.layout.header, parent, false);
ViewHolder vh = new ViewHolder(v, viewType,c);
return vh;
} else if (viewType == TYPE_ITEM) {
View v = LayoutInflater.from(parent.getContext()).inflate(
R.layout.items_row, parent, false);
ViewHolder vh = new ViewHolder(v, viewType,c);
return vh;
}
return null;
}
}