0

我正在Android使用ListView.

ListView每个ListItem. 在这里,我已经设置好onItemClickListView。因此,如果用户单击ListItem电子邮件应用程序会打开并在电子邮件中附加特定文件。对于单人File来说,这可以实现并正常工作。

现在我想在电子邮件中附加多个文件。即CheckBox在每个ListItem和检查项目中的实施必须附加到邮件中。

我知道它是可能的,因为它与文件管理器应用程序非常相似,通过单击单个文件来检查多个文件并删除所有文件Button。但是不知道怎么办。

4

3 回答 3

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 中获取选中的项目。认为它会帮助你。

于 2012-09-14T15:35:51.703 回答
1

您可以尝试实现自己的 ArrayAdapter。使用文件对象数组对其进行初始化,并在列表视图中使用它。

接下来制作适配器可见的索引列表,并且可以从外部进行操作。在您的onItemClick方法中,您拥有被点击项目的位置。如果它在该列表中,请将其删除,否则 - 将其插入。我们称之为列表selection

接下来在适配器的getView方法中构造一个内部带有复选框的视图。您再次拥有当前位置,因为它是作为参数传递的。根据 中位置的存在设置复选框状态selection

最后实现你的按钮的 onClick 以便它只对你的文件对象执行你对文件对象所做的任何事情,这些对象的位置在你的selection.

希望有帮助

于 2012-09-14T15:33:25.740 回答
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");

现在您可以类似地从其他活动中访问相同的变量。

于 2012-09-14T18:30:08.240 回答