gpt4 book ai didi

java - 复选框 true/false 表示 ischecked 工作,但不显示 ui 复选标记

转载 作者:行者123 更新时间:2023-12-02 01:37:21 24 4
gpt4 key购买 nike

我有一个时区列表,已添加到回收器 View 中。但是,我在 Activity 中的主列表检查正常,但是当我使用搜索并且列表压缩并且单击复选框时,它不会显示复选标记。但是,在调试中,单击时该值设置为 true,并且仍然会正确地将其添加到回收器 View 中。

我尝试在网上查找,但没有解决这个特定问题的方法。

@Override
public void onBindViewHolder(@NonNull final TimezoneViewHolder holder, final int position) {
// Initialize tools
final Timezone_Item currentTimezoneItem = timezoneList.get(position);
int pos = currentTimezoneItem.getId();
final int tzID = --pos;

holder.mChkboxSelect.setText(currentTimezoneItem.getValue());
holder.mUTCCode.setText(currentTimezoneItem.getName());


// This is the solution for... Clicking the checkbox once would select multiple timezones. Not with this.
if(selectedTimezones.get(position)){
holder.mChkboxSelect.setChecked(true);
currentTimezoneItem.setIsSelected(true);
}else{
holder.mChkboxSelect.setChecked(false);
currentTimezoneItem.setIsSelected(false);
}

// Manually activate the clicks in checkbox
holder.mChkboxSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(currentTimezoneItem.getIsSelected()){
currentTimezoneItem.setIsSelected(false);
holder.mChkboxSelect.setChecked(false);
}else {
currentTimezoneItem.setIsSelected(true);
holder.mChkboxSelect.setChecked(true);
}

if(TimezonePickerActivity.isSearching){
selectedTimezones.put(currentTimezoneItem.getId() - 1, currentTimezoneItem.getIsSelected());
}else {
selectedTimezones.put(tzID, currentTimezoneItem.getIsSelected());
}

notifyDataSetChanged();
}
});
}

这是我的搜索过滤器...

private Filter SearchFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence searchText) {
List<Timezone_Item> filteredList = new ArrayList<>();

if (searchText == null || searchText.length() == 0) {
TimezonePickerActivity.isSearching = false;
filteredList.addAll(timezoneListFull);
} else {
String filterPattern = searchText.toString().toLowerCase().trim();
TimezonePickerActivity.isSearching = true;

for (Timezone_Item item : timezoneListFull) {
if (item.getName().toLowerCase().contains(filterPattern)) {
filteredList.add(item);
}
}
}

FilterResults filterResults = new FilterResults();
filterResults.values = filteredList;

return filterResults;
}

@Override
protected void publishResults(CharSequence searchText, FilterResults results) {
timezoneList.clear();
timezoneList.addAll((List) results.values);
notifyDataSetChanged();
}
};

这是我将所选时区添加到回收器 View 中的代码

fabAddTimezone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { SparseBooleanArray selectedTimezones = Timezone_RVAdapter.selectedTimezones;

// Filter out false values
for (int i = 0; i < selectedTimezones.size(); i++) {
if(!selectedTimezones.valueAt(i)){
selectedTimezones.removeAt(i);
selectedTimezones.delete(i);
}
}

// Take filtered values and find its index to grab text and UTC code
for (int i = 0; i < selectedTimezones.size(); i++) {
// Get the position(Key) which is actually the Timezone_Item ID
int position = selectedTimezones.keyAt(i);

// Create new clock item to add into list
Clock_Item clockItem = new Clock_Item(
Timezone_RVAdapter.timezoneListFull.get(position).getName(),
Timezone_RVAdapter.timezoneListFull.get(position).getValue()
);

// Add clock to a list
mClockList.add(clockItem);
}

// Save clock list
sharedPrefs.SaveClockList(mClockList);

// Go back to main menu. Clock list should automatically load once activity boots
finish();
}
});

最佳答案

下面的 block 有可能始终为真

 if(currentTimezoneItem.getIsSelected()){
currentTimezoneItem.setIsSelected(false);
//Calling the below statement is irrelevant inside onClick of itself
//because when inside here checkbox can never be checked
holder.mChkboxSelect.setChecked(false);
}

删除或注释掉在 mChkboxSelect 上调用 .setChecked 的每一行语句,并允许 android 处理状态。您可以控制复选框的状态,但不能在其 onClick 事件内部控制,因为单击复选框会自动更改状态。

关于java - 复选框 true/false 表示 ischecked 工作,但不显示 ui 复选标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57511470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com