我正在 Android 中编写简单的过滤器,并希望将 ExpandableListAdapter 与复选框一起使用。
我对创建列表或选中复选框没有任何问题。但我真的不知道如何记住选择。关闭组并再次打开后,或者当我尝试打开不同的组时,复选框会发生变化。
我尝试在网上阅读相关内容,但没有找到解决问题的方法。
这是我的代码:
public class TasksFilterDialog extends Dialog{
private static final String TAG = "Filter Dialog";
private static final String ChildID = "ChildID";
private static final String GroupID = "GroupID";
private boolean[] statusCheck;
ExpandableListView list;
SimpleExpandableListAdapter listAdapter;
public TasksFilterDialog(Context context) {
super(context);
statusCheck = new boolean[Tasks.Status.values().length];
for(int i=0; i<statusCheck.length; i++)
statusCheck[i]=true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "Creating dialog");
this.setContentView(R.layout.tasks_filter);
list = (ExpandableListView)findViewById(R.id.filter_list);
setListAdapter(); // Setting Adapter Values to use on list
list.setAdapter(listAdapter); // Setting creating adapter to list
setOnChildClickListeners();
Log.d(TAG, "Creating dialog successfull");
}
private void setListAdapter() {
Log.d(TAG, "Setting list adapter");
listAdapter = new SimpleExpandableListAdapter(this.getContext(),
getGroups(),
R.layout.tasks_filter_groups_layout,
new String[] {GroupID},
new int[] {R.id.filter_group_text},
getChilds(),
R.layout.tasks_filter_simple_element,
new String[] {ChildID},
new int[] {R.id.filter_simple_element_text});
Log.d(TAG, "Setting list adapter successfull");
}
private List<HashMap<String, String>> getGroups() {
Log.d(TAG, "Adding groups values");
List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
HashMap<String, String> statusMap = new HashMap<String, String>();
statusMap.put(GroupID, "Status");
list.add(statusMap);
HashMap<String, String> usersMap = new HashMap<String, String>();
usersMap.put(GroupID, "Users");
list.add(usersMap);
Log.d(TAG, "Adding groups values successfull");
return list;
}
private List<List<HashMap<String, String>>> getChilds() {
Log.d(TAG, "Adding childs values");
List<List<HashMap<String, String>>> list = new ArrayList<List<HashMap<String, String>>>();
List<HashMap<String, String>> secList = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map;
Tasks.Status status[] = Tasks.Status.values();
for(int i=0; i<status.length; i++) {
Log.d(TAG, "Adding child" + status[i].toString());
map = new HashMap<String, String>();
map.put(ChildID, status[i].toString());
secList.add(map);
}
list.add(secList);
list.add(secList);
Log.d(TAG, "Adding childs values succesfull");
return list;
}
private void setOnChildClickListeners() {
list.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView list, View v,
int group, int id, long arg4) {
CheckBox cb = (CheckBox) v.findViewById(R.id.filter_simple_element_check);
cb.toggle();
switch(group){
case 0:
if(statusCheck[id])
statusCheck[id]=false;
else
statusCheck[id]=true;
break;
case 1:
//TODO After getting Tasks function
}
return false;
}
});
}
最佳答案
这取决于您想要设计它的程度。 Map> 会起作用。 map 占据一个位置并为您提供一组选中的子项。要确定 child 是否被选中,请在组上调用 Map.get(),然后查看集合是否包含 child 的 ID。
如果你想查看第三组的第二个 child 是否被选中,你可以这样做:
boolean isChecked = yourMap.get(3).contains(2);
要设置 child 选中:
yourMap.get(groupNum).add(childNum);
设置未选中的 child :
yourMap.get(groupNum).remove(childNum);
您需要初始化 map 以包含每个组的空集以避免 NPE,但这在您首次创建 map 时很容易做到。我相信你可以想出一个更简洁的方法来做到这一点,但它很简单而且会起作用。
关于android - ExpandableListView 和复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9813584/
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我有以下不起作用的代码:=form_for(resource,:as=>resource_name,:url=>session_path(resource_name),:html=>{:class=>"well"})do|f|=f.label:email=f.email_field:email=f.label:password=f.password_field:password-ifdevise_mapping.rememberable?%p=f.label:remember_me,:class=>"checkbox"=f.check_box:remember_me,:class=>"
我正在尝试以嵌套形式实现HABTM复选框。目前,我有3个模型。主题、类(class)和小组。协会如下:每个科目都有很多课。每节课都属于许多小组。现在,我正在尝试在单个创建和编辑表单上实现它们。这样一节课嵌套在主题中,每节课都有一个组复选框列表来实现HABTM关系。我在实现HABTM关系时遇到了麻烦,因为每个科目都有很多类(class),而且我不确定如何区分不同的类(class)。为了进一步详细说明,我能够使嵌套表单正常工作,但我无法让HABTM复选框保存到正确的类(class)中。以下代码示例是我的HABTM复选框实现。目前,我已经使用“subject[lessons_attribut
AB我在我的代码中使用了上面提到的,当我点击提交时,如果checked则需要1,如果没有,则需要0检查并将其存储在db中。如果checked我如何存储一个string像AB和nil如果notchecked我想将该字符串存储在db而不是0和1中? 最佳答案 这是这个辅助方法的定义:check_box(object_name,method,options={},checked_value="1",unchecked_value="0")所以我想你需要这样的东西:AB但在您的Rails应用程序中,您会得到字符串'AB'和字符串'nil',
在我的Rails应用程序中,我有一个项目列表(如任务列表),每个项目都有几个复选框来设置参数。当我提交表单时,选中的框在数据库中存储为零,未选中的存储为空。问题是:有办法配置吗?将数据存储在更传统的0或1上,因为我认为将null存储为false并将0存储为true有点令人困惑,特别是如果另一个应用程序(如C应用程序)需要读取数据。 最佳答案 假设您正在使用的属性是club_member,如“您是club_member吗?”。请注意,在Ruby/Rails中,它现在的工作方式是,ifmodel.club_member如果未选中(值为n
运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid
1.前言 在10.0的系统rom定制化开发中,在系统中有多个launcher的时候,会在开机进入launcher的时候弹窗launcher列表,让用户选择进入哪个launcher,这样显得特别的不方便所以产品开发中,要求用RoleManager的相关api来设置默认Launcher,但是在设置完默认Launcher以后,在安装一款Launcher的时候,默认Launcher就会失效,在系统设置的默认应用中Launcher选项就为空,点击home键的时候会弹出默认Launcher列表,让选择进入哪个默认Launcher.所以需要从安装Launcher的流程来分析相关的设置。来解决问题设置默认La
我认为会是:"✓".encode(:unicode)但我认为这不是.encode的正确用法。当我说:"✓".encode('Unicode')它无法进行转换。 最佳答案 如果您使用的是Ruby1.9(它具有更好的内置编码支持),您可以这样做:>checkmark="\u2713"#=>"✓">checkmark.encoding#=># 关于ruby-on-rails-如何在unicode中创建复选标记?,我们在StackOverflow上找到一个类似的问题:
我在项目中使用best_in_placegem,我试图在它自己的位置显示一个复选框,但我做不到。我正在搜索它,但我无法在任何地方找到答案。我发现人们在谈论显示“否”或"is"……或其他任何内容。但我只想查看复选框是否选中。 最佳答案 我使用的是font-awesome,但您也可以将它与Bootstrap或其他图像一起使用。我显示复选框的解决方案只是使用rawmethod呈现复选框图像(在我的例子中是font-awesome图标之一)=best_in_place@project,:active,:type=>:checkbox,:co
我正在关注railstutorial.org第3版,目前正在研究第8章:登录、注销。我在代码list8.51中发现了一个问题(登录时不记得测试):assert_nilcookies['remember_token']当我执行:raketest时,返回红色并出现以下错误:FAIL["test_login_without_remembering",UsersLoginTest,1.268578948]test_login_without_remembering#UsersLoginTest(1.27s)Expected""tobenil.test/integration/users_log