向下滚动列表视图,选中收藏夹按钮将取消选中android studio
单击收藏夹按钮时,下面的代码保存TextView的当前文本,再次单击时,按钮图像变为Fav_Checked。收藏夹按钮未选中,数组中的文本已删除,但问题是当我向下滚动ListView更新,且收藏夹按钮未选中时。请帮忙向下滚动列表视图,选中收藏夹按钮将取消选中android studio,android,listview,Android,Listview,单击收藏夹按钮时,下面的代码保存TextView的当前文本,再次单击时,按钮图像变为Fav_Checked。收藏夹按钮未选中,数组中的文本已删除,但问题是当我向下滚动ListView更新,且收藏夹按钮未选中时。请帮忙 public class MainActivity extends AppCompatActivity { // ArrayList<String> names = new ArrayList<>(); private ArrayList&
public class MainActivity extends AppCompatActivity {
// ArrayList<String> names = new ArrayList<>();
private ArrayList<String> names;
int x = names.size();
// private boolean[x] favorites;
private SharedPreferences sharedPreferences;
Context context = this;
MediaPlayer mPlayer;
Boolean isPlay = true;
ImageView playPauseGlobelBtn;
int maxVolume,resID,position;
String fname;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView=(ListView)findViewById(R.id.listView);
mPlayer = MediaPlayer.create(context, R.raw.asdf);
CustomAdapter customAdapter=new CustomAdapter();
listView.setAdapter(customAdapter);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
String favoriteItems = sharedPreferences.getString("FAVORITE_ITEMS", "");
if(favoriteItems.isEmpty()) {
names = new ArrayList<>();
}
else {
names = new ArrayList<>(Arrays.asList(favoriteItems.split(",")));
}
}
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
view = getLayoutInflater().inflate(R.layout.customlayout, null);
final TextView textView_name = (TextView)
view.findViewById(R.id.textView_name);
final Button favoritebutton = (Button) view.findViewById(R.id.tgbFav);
buttonInfo.setOnClickListener(new View.OnClickListener() {
String tag = v.getTag().toString();
if(tag != null) {
int i = Integer.parseInt(tag);
System.out.println(tag);
}
}
});
private ArrayList<String> names;
private SharedPreferences sharedPreferences;
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
String favoriteItems = sharedPreferences.getString("FAVORITE_ITEMS", "");
if(favoriteItems.isEmpty())
names = new ArrayList<>();
else
names = new ArrayList<>(Arrays.asList(favoriteItems.split(",")); //Update like this
favoritebutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick( View v) {
if (!names.contains(textView_name.getText())){
names.add((String) textView_name.getText());
for (int i=0; i<names.size(); i++) {
System.out.println(names.get(i));
favoritebutton.setBackgroundResource(R.drawable.fav_checked);
}
}
else {
System.out.println(textView_name.getText() + " is already present in the Array at index " + names.indexOf(textView_name.getText()));
int currentIndex = names.indexOf(textView_name.getText());
names.remove(currentIndex);
for (int i=0; i<names.size(); i++) {
System.out.println(names.get(i));
favoritebutton.setBackgroundResource(R.drawable.star_off);
}
}
sharedPreferences.edit().putString("FAVORITE_ITEMS", TextUtils.join(",", names)).apply();
}
});
<ToggleButton
android:id="@+id/tgbFav"
android:layout_width="30dp"
android:layout_height="30dp"
android:focusable="false"
android:focusableInTouchMode="false"
android:textOff=""
android:layout_toLeftOf="@+id/button"
android:textOn=""/>
public类MainActivity扩展了AppCompatActivity{
//ArrayList name=新的ArrayList();
私有数组列表名称;
int x=names.size();
//私有布尔[x]收藏夹;
私人共享引用共享引用;
上下文=这个;
媒体播放器mPlayer;
布尔值isPlay=true;
ImageView playPauseGlobelBtn;
int maxVolume,resID,position;
字符串fname;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView ListView=(ListView)findViewById(R.id.ListView);
mPlayer=MediaPlayer.create(context,R.raw.asdf);
CustomAdapter CustomAdapter=新的CustomAdapter();
setAdapter(customAdapter);
SharedReferences=PreferenceManager.GetDefaultSharedReferences(上下文);
String favoriteItems=SharedReferences.getString(“FAVORITE_ITEMS”和“”);
if(favoriteItems.isEmpty()){
名称=新的ArrayList();
}
否则{
名称=新的ArrayList(Arrays.asList(favoriteItems.split(“,”));
}
}
@凌驾
公共视图getView(最终int i、视图视图、视图组视图组){
view=GetLayoutFlater().充气(R.layout.customlayout,null);
最终文本视图文本视图_名称=(文本视图)
view.findViewById(R.id.textView\u名称);
final Button favoritebutton=(Button)view.findViewById(R.id.tgbFav);
buttonInfo.setOnClickListener(新视图.OnClickListener(){
字符串标记=v.getTag().toString();
如果(标记!=null){
int i=Integer.parseInt(标记);
系统输出打印项次(标签);
}
}
});
私有数组列表名称;
私人共享引用共享引用;
SharedReferences=PreferenceManager.GetDefaultSharedReferences(上下文);
String favoriteItems=SharedReferences.getString(“FAVORITE_ITEMS”和“”);
if(favoriteItems.isEmpty())
名称=新的ArrayList();
其他的
names=new ArrayList(Arrays.asList(favoriteItems.split(“,”);//如下更新
favoritebutton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(!names.contains(textView_name.getText())){
name.add((字符串)textView_name.getText());
对于(int i=0;i当您滚动ListView
时,少数可见的视图项将被重新用于整个列表。如果您没有正确处理getView
,则先前用于没有收藏夹的名称的项将被重新用于设置为收藏夹的名称。因此,看起来收藏夹按钮将被取消选中滚动ListView
时,会出现异常。您必须跟踪所有名称的最喜爱状态,并在getView
中使用它来显示正确的UI
现在,当点击favorite按钮时,您正在更新它的背景,并更新ArrayList
“名称”。您需要在getView
中使用此ArrayList
,检查姓名的当前收藏状态,并使用该状态为您的getView
伴侣中的favoritebutton
设置适当的背景资源,从您发布的问题和片段中我得到的信息是您正在保存所有收藏的项目n共享首选项中的ame。但正如您所知,onCreate中会显示“FAVORITE_ITEMS”,因此它只会向您提供以前添加的FAVORITE item。在您的滚动列表中,您知道是否会因为getView()而查看该项的更新为每个项目调用,例如,在未滚动列表之前,您单击的收藏夹项目似乎只是收藏夹。要显示该项目,您需要检查您的项目是否存在于收藏夹项目中,请在getView()中添加此代码段
记得在单击任何FavoriteButton时通知列表。在getView()中使用ViewHolder()关于适配器,完整信息@OMiShah请发布答案我无法实现stakoverflow中的所有答案。@Md.asaduzzamacan您发布viewHodler代码需要知道如何设置图像中的fav图标吗?@Abhishek plz检查我已更新了问题您是否可以使用示例实施检查此答案例如:初始化此阵列在创建与listView大小相同的适配器时,上面提到的答案显示使用相同的大小初始化数组,但在这里,数组的大小会随着从常用arrayprivate boolean[]中选择和删除项而改变favorites;我该如何初始化它?你能更新答案吗?我一周来一直无法解决这个问题,请解决这个问题。当我向下滚动时,fav_选中的仍然是相同的问题。我将如何通知列表。在这里实现上述代码。并删除R.drawable.star_off/fav_c的所有以前的代码他用星号关闭图标点击了一个最喜欢的按钮,按下按钮什么都不发生,按钮图标不变
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
Your code....
String favoriteItems = sharedPreferences.getString("FAVORITE_ITEMS", "");
if (favoriteItems.contains(textView_name.getText())) {
favoritebutton.setBackgroundResource(R.drawable.fav_checked);
} else {
favoritebutton.setBackgroundResource(R.drawable.star_off);
}
....
}