从ListView中检查Listitems并将其传递给另一个活动

时间:2012-09-14 15:10:35

标签: android android-listview android-checkbox

我正在使用Android开发ListView应用程序。

ListView每个ListItem都有一个文件。在这里,我在onItemClick中设置了ListView。因此,如果用户点击ListItem电子邮件应用程序,则会打开并将特定文件附加到电子邮件中。对于单File,它可以实现并且正常工作。

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

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

3 个答案:

答案 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");

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