gpt4 book ai didi

android - 如何在唯一的 ListView 位置访问 View ?

转载 作者:行者123 更新时间:2023-11-29 01:13:13 25 4
gpt4 key购买 nike

我有一个正在调整 list_item.xml 的 ListView 。 list_item.xml 只是一个带有 CheckBox

的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />

</LinearLayout>

当我单击其中一个复选框时,我希望取消选中其他复选框。因此,在我的适配器中,我在 getView 方法中将 CheckBox 添加到 CheckboxManager singelton 类。

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View list_item = convertView;//View Recycling

if (list_item == null) {
LayoutInflater vi;
vi = LayoutInflater.from(getContext());
list_item = vi.inflate(R.layout.database_item, null);
}

DatabaseItem databaseItem = getItem(position);

if (databaseItem != null) {

TextView textView = (TextView) list_item.findViewById(R.id.database_name);
CheckBox checkBox = (CheckBox) list_item.findViewById(R.id.checkBox);

if (textView != null) {
textView.setText(databaseItem.getTitle());
}

if (checkBox != null) {
CheckboxManager cbm = CheckboxManager.getInstanceOf(activity);
cbm.addCheckbox(checkBox, databaseItem.getQuery());
}

}

return list_item;
}

在我的 CheckboxManager 单例类中,我将 CheckBox View 累积到一个 ArrayList 中。我为复选框设置了一个点击监听器,并在通过遍历数组列表选中其中一个复选框时取消选中它们。

问题是我的数组列表大小总是一个!由于我正在调整 list_item.xml 的五个实例,我希望有五个独特的 CheckBox View ,但显然只有一个,因为我的 ArrayList 是只有尺寸 1(可能是因为 View 回收?)。

如何访问所有复选框并取消选中它们?

编辑

public class CheckboxManager {

private ArrayList<CheckBox> cbs = new ArrayList<>();
private static CheckboxManager singleton = null;
private static Activity activity = null;

private CheckboxManager(Activity activity){ this.activity = activity;}

// This is the only class method; the rest are instance methods.
public static CheckboxManager getInstanceOf(Activity activity){

if(null == singleton) return new CheckboxManager(activity);
return singleton;
}

public void addCheckbox(CheckBox cb, String query){

addClickListener(cb, query);
cbs.add(cb);
}

private void addClickListener(final CheckBox cb, final String query){

cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

// A box has been checked
if(true == isChecked) {
uncheckOtherBoxes(cb);
Movies.swapCursor(getCursor(query), activity);
}
}
}
);
}

private void uncheckOtherBoxes(CheckBox cb){
int idx = cbs.indexOf(cb);
Log.v("TAG","Size of list is "+cbs.size());
for(int i=0;i<cbs.size();i++){
if(idx != i){
cb.setChecked(false);
}
}
}

private Cursor getCursor(String query){
SQLiteDatabase db = DatabaseHelper.getInstanceOf(activity).getDatabase();
return db.rawQuery(query, null);
}
}

最佳答案

您的单例格式不正确。

这是错误的。您可以看到它每次都只返回一个新实例,因为它从不在第一次存储它。

public static CheckboxManager getInstanceOf(Activity activity){

if(null == singleton) return new CheckboxManager(activity);
return singleton;
}

应该是……

public static CheckboxManager getInstanceOf(Activity activity){

if(null == singleton)
singletone = new CheckboxManager(activity);
return singleton;
}

关于android - 如何在唯一的 ListView 位置访问 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41579345/

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