- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个关于 ExpandableListViews
和使用 CheckBoxes
的快速问题。我将在下面显示当前代码。我目前有一个 ExpandableListView
,每个子行中都有一个复选框。
可以选择这些 checkboxes
等等,但问题是我的 ExpandableListView
中有很多 child 。所以问题是,当我选中复选框时,它显示选中了多个复选框。因此,如果我选中第一个 child 复选框,它也会显示第 6 个或第 7 个 child 也被选中。
package com.WebGems.MW3CustomClasses;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ImageView;
import android.widget.SimpleExpandableListAdapter;
import android.widget.TextView;
public class PrimaryWeapon extends Activity {
ExpandableListView listPrimaryWeapon;
//Strike Package ArrayLists
ArrayList assaultPackage = new ArrayList();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.primary_weapon);
listPrimaryWeapon = (ExpandableListView)findViewById(R.id.listView1);
Bundle extras = getIntent().getExtras();
String type = extras.getString("type");
if(type.equals("assault")) {
showAssaultPackageList();
}
}
private void showAssaultPackageList() {
// TODO Auto-generated method stub
assaultPackage.add("UAV");
assaultPackage.add("CARE PACKAGE");
assaultPackage.add("I.M.S.");
assaultPackage.add("PREDATOR MISSILE");
assaultPackage.add("SENTRY GUN");
assaultPackage.add("PRECISION AIRSTRIKE");
assaultPackage.add("ATTACK HELICOPTER");
assaultPackage.add("STRAFE RUN");
assaultPackage.add("AH-6 OVERWATCH");
assaultPackage.add("REAPER");
assaultPackage.add("ASSAULT DRONE");
assaultPackage.add("AC-130");
assaultPackage.add("PAVE LOW");
assaultPackage.add("JUGGERNAUT");
assaultPackage.add("OSPREY GUNNER");
// Construct Expandable List
final String NAME = "name";
final String IMAGE = "image";
final String DATA = "data";
final String NUMBER = "number";
final LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final ArrayList<HashMap<String, String>> headerData = new ArrayList<HashMap<String, String>>();
final HashMap<String, String> group1 = new HashMap<String, String>();
group1.put(NAME, "Assault Package");
headerData.add( group1 );
final ArrayList<ArrayList<HashMap<String, Object>>> childData = new ArrayList<ArrayList<HashMap<String, Object>>>();
final ArrayList<HashMap<String, Object>> group1data = new ArrayList<HashMap<String, Object>>();
childData.add(group1data);
int assaultPackageCounter = 0;
for(int arm = 0; arm < assaultPackage.size(); ++arm) {
final HashMap<String, Object> assaultPackageMap = new HashMap<String, Object>();
assaultPackageMap.put(NAME, assaultPackage.get(arm));
if(assaultPackageCounter == 0) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.uav));
assaultPackageMap.put(DATA, "UAV DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.three));
}
if(assaultPackageCounter == 1) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.carepackage));
assaultPackageMap.put(DATA, "CARE PACKAGE DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.four));
}
if(assaultPackageCounter == 2) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.ims));
assaultPackageMap.put(DATA, "IMS DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.five));
}
if(assaultPackageCounter == 3) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.predatormissile));
assaultPackageMap.put(DATA, "PREDATOR MISSILE DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.five));
}
if(assaultPackageCounter == 4) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.sentrygun));
assaultPackageMap.put(DATA, "SENTRY GUN DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.five));
}
if(assaultPackageCounter == 5) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.precisionairstrike));
assaultPackageMap.put(DATA, "PRECISION AIRSTRIKE DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.six));
}
if(assaultPackageCounter == 6) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.attackhelicopter));
assaultPackageMap.put(DATA, "ATTACK HELICOPTER DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.seven));
}
if(assaultPackageCounter == 7) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.straferun));
assaultPackageMap.put(DATA, "STRAFE RUN DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.nine));
}
if(assaultPackageCounter == 8) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.ahsixoverwatch));
assaultPackageMap.put(DATA, "AH-6 OVERWATCH DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.nine));
}
if(assaultPackageCounter == 9) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.reaper));
assaultPackageMap.put(DATA, "REAPER DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.nine));
}
if(assaultPackageCounter == 10) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.assaultdrone));
assaultPackageMap.put(DATA, "ASSAULT DRONE DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.ten));
}
if(assaultPackageCounter == 11) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.aconethreezero));
assaultPackageMap.put(DATA, "AC-130 DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.twelve));
}
if(assaultPackageCounter == 12) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.pavelow));
assaultPackageMap.put(DATA, "PAVE LOW DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.twelve));
}
if(assaultPackageCounter == 13) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.juggernaut));
assaultPackageMap.put(DATA, "JUGGERNAUT DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.fifteen));
}
if(assaultPackageCounter == 14) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.ospreygunner));
assaultPackageMap.put(DATA, "OSPREY GUNNER DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.seventeen));
}
assaultPackageCounter++;
group1data.add(assaultPackageMap);
}
assaultPackageCounter = 0;
// Set up some sample data in both groups
/*for( int i=0; i<10; ++i) {
final HashMap<String, Object> map = new HashMap<String,Object>();
map.put(NAME, "Child " + i );
//map.put(DATA, "Data " + i);
map.put(IMAGE, getResources().getDrawable((i%3==0? R.drawable.arrowright : R.drawable.arrowdown)));
( i%2==0 ? group1data : group2data ).add(map);
}*/
listPrimaryWeapon.setAdapter( new SimpleExpandableListAdapter(
this,
headerData,
R.layout.group_row,
new String[] { NAME, DATA }, // the names of the data
new int[] { R.id.groupname }, // the text field to populate with the field data
childData,
0,
null,
new int[] {}
) {
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final View v = super.getChildView(groupPosition, childPosition, isLastChild, convertView, parent);
// Populate your custom view here
((TextView)v.findViewById(R.id.name)).setText( (String) ((Map<String,Object>)getChild(groupPosition, childPosition)).get(NAME) );
((TextView)v.findViewById(R.id.textView1)).setText( (String) ((Map<String,Object>)getChild(groupPosition, childPosition)).get(DATA) );
((ImageView)v.findViewById(R.id.image)).setImageDrawable( (Drawable) ((Map<String,Object>)getChild(groupPosition, childPosition)).get(IMAGE) );
((ImageView)v.findViewById(R.id.imageView1)).setImageDrawable( (Drawable) ((Map<String,Object>)getChild(groupPosition, childPosition)).get(NUMBER) );
CheckBox cb = (CheckBox)v.findViewById( R.id.checkBox1 );
cb.setClickable(false);
return v;
}
@Override
public View newChildView(boolean isLastChild, ViewGroup parent) {
return layoutInflater.inflate(R.layout.strikepackagelayout, null, false);
}
}
);
ExpandableListView list = (ExpandableListView) findViewById(R.id.listView1);
list.setChoiceMode(ExpandableListView.CHOICE_MODE_MULTIPLE);
list.setOnChildClickListener(new OnChildClickListener(){
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
CheckBox cb = (CheckBox)v.findViewById( R.id.checkBox1 );
if(cb != null){
cb.toggle();
}
Log.d("type", "Group: " + groupPosition + ", Child: " + childPosition);
System.out.println("Group:"+groupPosition+", Child: "+childPosition);
return true;
}
});
listPrimaryWeapon.expandGroup(0);
}
}
最佳答案
作为可扩展 ListView ,每次移动时回收 View 。所以你需要保存每个 View 的状态。
1> 为每个复选框设置不同的id。类似的东西 checkBox.setId(groupPosition + 1);
2> 将选中的复选框 id 添加到 HashMap 对象中,例如
checkBox.setOnCheckedChangeListener(
new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(if (checkBox.isChecked()) {
mapViewState.put(checkBox.getId(),
checkBoxSelected);
} else {
mapViewState.remove(checkBox
.getId());
}
}
});
然后从HashMap中加载复选框的状态,或者迭代它来获取选中的值。
关于Android ExpandableListView CheckBox 选择只点击复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8420168/
我只是想知道Mvvmmcross框架中是否潜藏着ExpandableListViews或与之相似的功能,还是这种控件不适用于多平台要求。 的功能在 http://deapsquatter.blogsp
我想知道是否可以将一个 ExpandableListView 作为另一个 ExpandableListView 的一个元素的一个子元素。谢谢 最佳答案 是的。可以在可扩展 ListView 中创建可扩
现在我想使用 ExpandableListView 来显示我的数据,我想更改项目左侧的图标或让它消失。有人可以给我一个建议吗。 谢谢。 最佳答案 setGroupIndicator(null) 应该让
我在 expandablelistview 子项目中有一个 edittext。然后,我在这个 edittext 中输入了一个文本,但是每当我点击其他 expandablelistview 标题时,我输
我正在尝试弄清楚如何构建包含(许多)的 View : PARENT1(可勾选、可扩展) CHILD1(单选按钮) CHILD2(单选按钮) ... PARENT2(可勾选、可扩展) CHILD1(可检
所以我刚刚进入了 ExpandableListView 领域,并希望在 DrawerLayout 中制作一个只有一组和 3 个 child 的简单列表 这是我的适配器代码: public cl
我是 Android 开发新手。我关注了this显示 ExpandableListView 及其正常工作的教程。如果我按所有组,那么所有组都会展开。 我一次只想扩展一组。一开始,第一个组将自动展开,如
我是 Android 新手。我想创建一个可扩展的 ListView,其中 1 行具有必须在 manin 线程中指定的自定义信息,而不是在布局中进行硬编码。 我想要一个图像和 2 个 TextView
我的应用程序中有一个 ExpandableListView。我想让子布局比组标题窄一点,并保持居中。由于一些视觉效果,我必须从代码中设置布局参数,但是我似乎找不到最好的解决方案,尝试从 xml 更
我正在将 JSON 解析为 ExpandableListView,在每个子项上,用户可以选择他想要拥有的 +/- 按钮的每个子项的数量。 +/- 按钮连接到 TextView,其中显示每个子项的总金额
我希望我的团队能够在第一时间扩大。然后它应该像往常一样运行(单击指示器后折叠/展开) 我找不到解决此问题的任何有效解决方案。 最佳答案 循环遍历所有组并使用expandGroup()您的 Expand
我正在编写一个 Android 应用程序,我决定使用可扩展 ListView 。我拥有所需的一切,列表工作正常,但是当我填充它时,组的顺序似乎与应有的顺序不同,这是一个示例: 如您所见,子值很好,只有
我在组项目的 ExpandableListView 中添加了 EditText,之后当我单击组项目时,不会出现包含子项目的列表。可能是什么问题?在这种情况下,这个列表是否可以扩展?或者禁止在Expan
当我单击组 View 时,可扩展列表的顺序会发生变化 我发现有人有类似的问题 here 顺序似乎是随机的,我不明白发生了什么。 这是我的代码,我知道它很乱,我已经重写了很多次。 public clas
我是 Android 编程的新手,我一直在思考如何做到这一点……我想创建一个 ExpandableListView,其中包含相同的子项 XML(包含添加、编辑和删除按钮)填充在所有组项目中。 有人可以
我在 Android 抽屉导航中使用 ExpandableListsViews 而不是菜单。而 OnExpandlistner 我正在改变背景颜色。前两个项目表现正常,它们的背景颜色发生了变化。但最后
我对 ExpandableListView 有疑问:在我的应用程序中,我使用了 ExpandableListView 并用我的适配器填充它“类 MyExpandableListAdapter 扩展了
我正在使用 Fedor 的适配器和图像加载器将图像延迟加载到可扩展 ListView 中。 ( Lazy load of images in ListView ) 它运行良好,但有一个问题。仅当 Im
关注this教程我能够制作一个大致这样布局的 View : Group1 child1 child2 group2 child1 child2 但是我想要更多的嵌套: grou
Blockquote 我在 android 中使用 ExpandableListView 这是适配器类中getChildView的代码: @Override public View g
我是一名优秀的程序员,十分优秀!