gpt4 book ai didi

android - 折叠/展开可扩展 ListView 会更改 checkedtextview 中随机子项的切换

转载 作者:太空狗 更新时间:2023-10-29 13:25:32 26 4
gpt4 key购买 nike

我能够在 expandablelistview 中实现 checkedtextview。但是当我检查某些子项时,其他父项的某些子项也会被选中。我无法弄清楚为什么我会遇到这样的问题?有人遇到过类似情况吗?提前感谢您的帮助。

编辑:

按照建议,我在 customadapter 中创建了 bool 多维数组:`

Boolean[][] categoryx = new Boolean` [5][5];

自定义适配器中有 getchildView 方法:

 @Override
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
System.out.print(groupPosition);
System.out.println(childPosition);
final String children = (String) getChild(groupPosition, childPosition);
CheckedTextView text = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.listrow_details, null);
}
text = (CheckedTextView) convertView.findViewById(R.id.detail_textView1);
text.setText(children);

convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {

((CheckedTextView )v).toggle();
}
});
return convertView;
}

但我很困惑我应该使用访问的子位置切换我的值的方法。

编辑 2:我试图保存状态的自定义适配器:

import android.app.Activity;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckedTextView;
import android.widget.TextView;
import android.widget.Toast;

public class MyCategoryAdapter extends BaseExpandableListAdapter {

private SparseArray<Groupx> groups;
public LayoutInflater inflater;
public Activity activity;
Boolean[][] categoryx = new Boolean [5][5];

public MyCategoryAdapter(Activity act, SparseArray<Groupx> groups) {
activity = act;
this.groups = groups;
inflater = act.getLayoutInflater();
}

@Override
public Object getChild(int groupPosition, int childPosition) {
return groups.get(groupPosition).children.get(childPosition);
}

@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}

@Override
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
System.out.print(groupPosition);
System.out.println(childPosition);
final String children = (String) getChild(groupPosition, childPosition);
CheckedTextView text = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.listrow_details, null);
}
text = (CheckedTextView) convertView.findViewById(R.id.detail_textView1);
text.setText(children);

convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Integer lol = (Integer) v.getTag();
((CheckedTextView )v).toggle();
}
});
return convertView;
}

@Override
public int getChildrenCount(int groupPosition) {
return groups.get(groupPosition).children.size();
}

@Override
public Object getGroup(int groupPosition) {
return groups.get(groupPosition);
}

@Override
public int getGroupCount() {
return groups.size();
}

@Override
public void onGroupCollapsed(int groupPosition) {
super.onGroupCollapsed(groupPosition);
}

@Override
public void onGroupExpanded(int groupPosition) {
super.onGroupExpanded(groupPosition);
}

@Override
public long getGroupId(int groupPosition) {
return 0;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.listrow_group, null);
}
Groupx group = (Groupx) getGroup(groupPosition);
((CheckedTextView) convertView).setText(group.stringx.toString());
((CheckedTextView) convertView).setChecked(isExpanded);
return convertView;
}

@Override
public boolean hasStableIds() {
return false;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}

最佳答案

这是由于对ListView行回收的误解而经常出现的问题。

事实是,您只在 View 中保留选中的属性。现在,ListView 重用从屏幕上消失的单元格以节省内存,因此,一旦检查了一行,一旦原始行被回收,另一行也会显示为已检查。

要避免这种情况,您必须在 ListView 的数据源中保存检查状态,并在您的 ListView 适配器中设置适当的检查值。

关于android - 折叠/展开可扩展 ListView 会更改 checkedtextview 中随机子项的切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21651415/

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