在 RecyclerView 中切换按钮位置
Toggle Button positions in RecyclerView
我在回收器视图中有切换按钮我将布尔值保存在 sharedpreference 中以识别每次重新启动应用程序时是否按下切换按钮现在的问题是
当我单击 1 切换按钮并关闭应用程序时,每个切换按钮都对关闭按钮进行相同的操作,切换按钮和回收器视图之间没有位置连接,这是我的代码
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.model,null);
MyHolder holder=new MyHolder(v);
SharedPreferences sharedPrefs = c.getSharedPreferences("lol", MODE_PRIVATE);
Boolean a = sharedPrefs.getBoolean("abc" , false);
if(a) {
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_light));
holder.fav.setChecked(true);
} else {
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off));
holder.fav.setChecked(false);
}
return holder;
}
@Override
public void onBindViewHolder(final MyHolder holder, final int position) {
holder.nameTxt.setText(players[position]);
holder.posTxt.setText(positions[position]);
holder.img.setImageResource(images[position]);
holder.fav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c,R.drawable.star_light));
SharedPreferences.Editor editor = c.getSharedPreferences("lol", MODE_PRIVATE).edit();
editor.putBoolean("abc", true);
editor.commit();
} else {
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off));
SharedPreferences.Editor editor = c.getSharedPreferences("lol", MODE_PRIVATE).edit();
editor.putBoolean("abc", false);
editor.commit();
}
}
});
你的实现是错误的。
您应该只使用 onCreateViewHolder()
来扩充布局。
绑定操作应该在onBindViewHolder()
中。在 onBindViewHolder()
中使用切换操作
我进行了快速编辑。请详细检查。我在 SharedPreferences
中使用了 position
。所以每个 toggle button
值保存在不同的键中。这可能有效。
SharedPreferences.Editor editor = c.getSharedPreferences("lol", MODE_PRIVATE).edit();
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.model,null);
MyHolder holder=new MyHolder(v);
return holder;
}
@Override
public void onBindViewHolder(final MyHolder holder, final int position) {
holder.nameTxt.setText(players[position]);
holder.posTxt.setText(positions[position]);
holder.img.setImageResource(images[position]);
SharedPreferences sharedPrefs = c.getSharedPreferences("lol", MODE_PRIVATE);
Boolean a = sharedPrefs.getBoolean("abc"+position , false);
if (a){
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_light));
holder.fav.setChecked(true);
}else {
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off));
holder.fav.setChecked(false);
}
holder.fav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c,R.drawable.star_light));
editor.putBoolean("abc"+position, true);
editor.commit();
}
else{
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off));
editor.putBoolean("abc"+position, false);
editor.commit();
}
}
});
成功了谢谢大家这是正确答案
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.model,null);
MyHolder holder=new MyHolder(v);
return holder;
}
@Override
public void onBindViewHolder(final MyHolder holder, final int position) {
holder.nameTxt.setText(players[position]);
holder.posTxt.setText(positions[position]);
holder.img.setImageResource(images[position]);
SharedPreferences sharedPrefs = c.getSharedPreferences("lol", MODE_PRIVATE);
Boolean a = sharedPrefs.getBoolean("abc" + position, false);
if (a){
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_light));
holder.fav.setChecked(true);
}else {
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off));
holder.fav.setChecked(false);
}
holder.fav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c,R.drawable.star_light));
SharedPreferences.Editor editor = c.getSharedPreferences("lol", MODE_PRIVATE).edit();
editor.putBoolean("abc" + position, true);
editor.commit();
}
else{
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off));
SharedPreferences.Editor editor = c.getSharedPreferences("lol", MODE_PRIVATE).edit();
editor.putBoolean("abc" + position, false);
editor.commit();
}
}
});
我在回收器视图中有切换按钮我将布尔值保存在 sharedpreference 中以识别每次重新启动应用程序时是否按下切换按钮现在的问题是 当我单击 1 切换按钮并关闭应用程序时,每个切换按钮都对关闭按钮进行相同的操作,切换按钮和回收器视图之间没有位置连接,这是我的代码
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.model,null);
MyHolder holder=new MyHolder(v);
SharedPreferences sharedPrefs = c.getSharedPreferences("lol", MODE_PRIVATE);
Boolean a = sharedPrefs.getBoolean("abc" , false);
if(a) {
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_light));
holder.fav.setChecked(true);
} else {
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off));
holder.fav.setChecked(false);
}
return holder;
}
@Override
public void onBindViewHolder(final MyHolder holder, final int position) {
holder.nameTxt.setText(players[position]);
holder.posTxt.setText(positions[position]);
holder.img.setImageResource(images[position]);
holder.fav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c,R.drawable.star_light));
SharedPreferences.Editor editor = c.getSharedPreferences("lol", MODE_PRIVATE).edit();
editor.putBoolean("abc", true);
editor.commit();
} else {
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off));
SharedPreferences.Editor editor = c.getSharedPreferences("lol", MODE_PRIVATE).edit();
editor.putBoolean("abc", false);
editor.commit();
}
}
});
你的实现是错误的。
您应该只使用 onCreateViewHolder()
来扩充布局。
绑定操作应该在onBindViewHolder()
中。在 onBindViewHolder()
我进行了快速编辑。请详细检查。我在 SharedPreferences
中使用了 position
。所以每个 toggle button
值保存在不同的键中。这可能有效。
SharedPreferences.Editor editor = c.getSharedPreferences("lol", MODE_PRIVATE).edit();
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.model,null);
MyHolder holder=new MyHolder(v);
return holder;
}
@Override
public void onBindViewHolder(final MyHolder holder, final int position) {
holder.nameTxt.setText(players[position]);
holder.posTxt.setText(positions[position]);
holder.img.setImageResource(images[position]);
SharedPreferences sharedPrefs = c.getSharedPreferences("lol", MODE_PRIVATE);
Boolean a = sharedPrefs.getBoolean("abc"+position , false);
if (a){
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_light));
holder.fav.setChecked(true);
}else {
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off));
holder.fav.setChecked(false);
}
holder.fav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c,R.drawable.star_light));
editor.putBoolean("abc"+position, true);
editor.commit();
}
else{
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off));
editor.putBoolean("abc"+position, false);
editor.commit();
}
}
});
成功了谢谢大家这是正确答案
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.model,null);
MyHolder holder=new MyHolder(v);
return holder;
}
@Override
public void onBindViewHolder(final MyHolder holder, final int position) {
holder.nameTxt.setText(players[position]);
holder.posTxt.setText(positions[position]);
holder.img.setImageResource(images[position]);
SharedPreferences sharedPrefs = c.getSharedPreferences("lol", MODE_PRIVATE);
Boolean a = sharedPrefs.getBoolean("abc" + position, false);
if (a){
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_light));
holder.fav.setChecked(true);
}else {
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off));
holder.fav.setChecked(false);
}
holder.fav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c,R.drawable.star_light));
SharedPreferences.Editor editor = c.getSharedPreferences("lol", MODE_PRIVATE).edit();
editor.putBoolean("abc" + position, true);
editor.commit();
}
else{
holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off));
SharedPreferences.Editor editor = c.getSharedPreferences("lol", MODE_PRIVATE).edit();
editor.putBoolean("abc" + position, false);
editor.commit();
}
}
});