我正在使用Android
开发ListView
应用程序。
ListView
每个ListItem
都有一个文件。在这里,我在onItemClick
中设置了ListView
。因此,如果用户点击ListItem
电子邮件应用程序,则会打开并将特定文件附加到电子邮件中。对于单File
,它可以实现并且正常工作。
现在我想在电子邮件中附加多个文件。即在每个CheckBox
中实施ListItem
并且已检查的项目必须附加到邮件中。
我知道它的可能性,因为它非常类似于文件管理器应用程序,它通过单击Button
来检查多个文件并删除所有文件。但不知道该怎么做。
答案 0 :(得分:3)
在ListAdapter中创建一个SparseBooleanArray
private SparseBooleanArray checkStatus;
此SparseBooleanArray存储已检查的项目。现在在getView中执行以下操作
@Override
public View getView(int position, View view, ViewGroup parent) {
ViewCache viewCache;
if (view == null){
viewCache = new ViewCache();
view = layoutInflater.inflate(R.layout.list_box, null, false);
viewCache.checkBox = view.findViewById(R.id.check_box);
viewCache.checkBox.setOnCheckedChangeListener(onCheckedChangeListener);
//other views in the list box
...........
}
vewCache = (ViewCache)view.getTag();
viewCache.checkBox.setTag(position);
viewCache.checkBox.setChecked(isChecked(position));
//set other views
........
}
这是ViewCache类
private static class ViewCache{
CheckBox checkBox;
//other views in the list box
.......
}
此方法检查是否检查了位置
private boolean isChecked(int position){
return checkStatus.get(position, false);
}
这是onCheckChangeListener
CompoundButton.OnCheckedChangeListener onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
checkStatus.put(((Integer)compoundButton.getTag()), b);
}
};
最后,您可以从SparseBooleanArray checkStatus获取已检查的项目。认为它会对你有所帮助。
答案 1 :(得分:1)
您可以尝试实现自己的ArrayAdapter。使用文件对象数组对其进行初始化,并在列表视图中使用它。
接下来,创建适配器可见的索引列表,并从外部进行操作。在onItemClick
方法中,您拥有所点击项目的位置。如果它在该列表中删除它,否则 - 插入它。我们称之为selection
。
接下来在适配器的getView
方法中构建一个带有复选框的视图。你又有了当前的位置,因为它是作为一个参数传递的。根据{{1}}中位置的存在设置复选框状态。
最后实现按钮的onClick,这样它就可以对你的文件对象执行任何操作,只对那些位置在selection
中的file_array对象。
希望有所帮助
答案 2 :(得分:1)
在上面的答案中,Sreejith已经很好地解释了如何使用SparseBooleanArray在列表视图中存储已检查项的状态。这解决了问题的第一部分
关于将这些项的状态传递给其他活动的第二部分可以使用Application类来实现。
申请类:
需要维护全局应用程序状态的基类。有时您希望存储数据,例如需要从多个活动访问的全局变量 - 有时在应用程序中的任何位置。在这种情况下,Application对象将帮助您。
以下是此示例代码:
public class TopClass extends Application {
private static TopClass topClass;
public TopClass getInstance()
{
return topClass;
}
@Override
public void onCreate ( )
{
super.onCreate();
topClass = this;
}
public ArrayList<String> arrList = new ArrayList<String>();
}
您需要在应用程序标记下的应用程序清单文件中设置标记android:name =“TopClass”。这样的事情:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:name="TopClass" >
....
....
以下是您可以从活动中访问它的方法:
TopClass top = (TopClass)getApplicationContext();
top.arrList.add("StackOverflow");
现在您可以类似地从其他活动访问相同的变量。