【发布时间】:2020-11-17 22:17:33
【问题描述】:
我有一个 RecyclerView ,当用户单击任何项目时,它将打开一个用户必须完成一些任务的活动,如果用户完成了任务,它将被记录在 SharePrefrences 中(到这里没有问题)然后如果用户返回到 recyclerView,我已经在布局中定义的图像将是可见的,这意味着这一步已经完成。但是当用户完成任务后返回到 recyclerView 时,问题就来了
例如,我点击item 1,完成所有任务然后返回recyclerView,除了item 1,item 8、16、24 也能看到图片。 这是查看的必要代码:
在任务活动中:
private void trophyGiftRecycler() {
if ((Integer)img_test1_p1.getTag()==R.drawable.alph1_a) {
SharedPreferences prefs1 = getSharedPreferences("prefs1", MODE_PRIVATE);
boolean letter1 = prefs1.getBoolean("letter1", true);
if (letter1) {
trophyShared();
}
}
}
private void trophyShared() {
if ((Integer)img_test1_p1.getTag()==R.drawable.alph1_a) {
SharedPreferences prefs1 = getSharedPreferences("prefs1", MODE_PRIVATE);
SharedPreferences.Editor editor = prefs1.edit();
editor.putBoolean("letter1", true);
editor.apply();
}
}
In the MainAdapter
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
holder.itemLetter.setImageResource(mainModelAlphabets.get(position).getItemImages());
holder.itemTxt.setImageResource(mainModelAlphabets.get(position).getItemTxt());
holder.itemLetter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(canStart) {
canStart = false; // do canStart false
// Do what you don't want to run twice due to double tap
if (position==0){
Activity activity = (Activity) context;
Intent intent = new Intent(context,Alphabet2.class);
intent.putExtra("alphabet_word1",R.drawable.alphabet_a1);
intent.putExtra("alphabet_word2",R.drawable.alphabet_a2);
intent.putExtra("alphabet_word3",R.drawable.alphabet_a3);
activity.startActivity(intent);
activity.overridePendingTransition(R.anim.activity_slide_in_left,R.anim.activity_slide_out_right);
Runtime.getRuntime().gc();
activity.onBackPressed();
}
if (position==1){
Activity activity = (Activity) context;
Intent intent = new Intent(context,Alphabet2.class);
intent.putExtra("alphabet_word1",R.drawable.alphabet_b1);
intent.putExtra("alphabet_word2",R.drawable.alphabet_b2);
intent.putExtra("alphabet_word3",R.drawable.alphabet_b3);
activity.startActivity(intent);
activity.overridePendingTransition(R.anim.activity_slide_in_left,R.anim.activity_slide_out_right);
Runtime.getRuntime().gc();
activity.onBackPressed();
}
});
setAnimation(holder.itemView,position);
SharedPreferences prefs1 = context.getSharedPreferences("prefs1", MODE_PRIVATE);
SharedPreferences prefs2 = context.getSharedPreferences("prefs2", MODE_PRIVATE);
boolean letter1 = prefs1.getBoolean("letter1", false);
boolean letter2 = prefs2.getBoolean("letter2", false);
if (letter1){
if (position==0){
holder.itemTrophy.setVisibility(View.VISIBLE);
}
}
if (letter2){
if (position==1){
holder.itemTrophy.setVisibility(View.VISIBLE);
}
}
}
如您所见,它应该在位置 1 或 2 中可见,但在其他位置可见(不是全部_也是如此。
【问题讨论】:
-
也添加 Else 部分。在
onBindViewHolder内。您设置了 if 部分的可见性,但没有设置 else 部分。 -
这也将使图像在其他视图中不可见。