Android 带复选框的列表视图
作为android编程的初学者,我正在开发一款应用程序。 我必须做一个图像的列表视图,2个文本视图和每行一个复选框。 我必须在操作栏中实现一个“继续”按钮,因此当单击此按钮时,列表中的所有复选框都会显示在另一个listview的警报对话框中。 我面临的问题是,我不知道如何知道选中了哪个复选框,以便实现alertdialog。 有人能帮我吗 这是我的主要活动代码:Android 带复选框的列表视图,android,Android,作为android编程的初学者,我正在开发一款应用程序。 我必须做一个图像的列表视图,2个文本视图和每行一个复选框。 我必须在操作栏中实现一个“继续”按钮,因此当单击此按钮时,列表中的所有复选框都会显示在另一个listview的警报对话框中。 我面临的问题是,我不知道如何知道选中了哪个复选框,以便实现alertdialog。 有人能帮我吗 这是我的主要活动代码: package com.example.view; import java.util.ArrayList; import andr
package com.example.view;
import java.util.ArrayList;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.ListView;
public class MainActivity extends ActionBarActivity {
public static final String TAG = MainActivity.class.getSimpleName();
ListView listView;
ArrayList<ListViewItem> items;
CustomListViewAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
items = new ArrayList<MainActivity.ListViewItem>();
items.add(new ListViewItem(R.drawable.ic_launcher, "Item1", "Item1 Description"));
items.add(new ListViewItem(R.drawable.ic_launcher, "Item2", "Item2 Description"));
items.add(new ListViewItem(R.drawable.ic_launcher, "Item3", "Item3 Description"));
items.add(new ListViewItem(R.drawable.ic_launcher, "Item4", "Item4 Description"));
adapter = new CustomListViewAdapter(this, items);
listView.setAdapter(adapter);
}
class ListViewItem {
private int thumbnailResource;
private String title;
private String subTitle;
public ListViewItem()
{
}
public ListViewItem(int thumbnailResource, String title, String subTitle)
{
this.thumbnailResource = thumbnailResource;
this.title = title;
this.subTitle = subTitle;
}
public int getThumbnailResource()
{
return thumbnailResource;
}
public void setThumbnailResource(int thumbnailResource)
{
this.thumbnailResource = thumbnailResource;
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public String getSubTitle()
{
return subTitle;
}
public void setSubTitle(String subTitle)
{
this.subTitle = subTitle;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions_view, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.action_continue:
doContinue();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
private void doContinue()
{
// open the alertdialog box depending on the items selected
}
}
这是我的适配器代码:
package com.example.view;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.view.MainActivity.ListViewItem;
public class CustomListViewAdapter extends ArrayAdapter<ListViewItem>
{
LayoutInflater inflater;
ArrayList<ListViewItem> items;
public CheckBox checkBox;
public static final String TAG = MainActivity.class.getSimpleName();
public CustomListViewAdapter(Activity context, ArrayList<ListViewItem> items)
{
super(context, R.layout.list_item_row, items);
this.items = items;
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public View getView(final int position, View convertView, ViewGroup parent)
{
//System.out.println(position);
ListViewItem item = items.get(position);
View rowview = inflater.inflate(R.layout.list_item_row, parent, false);
ImageView imgView = (ImageView) rowview.findViewById(R.id.imgThumbnail);
TextView txtTitle = (TextView) rowview.findViewById(R.id.txtTitle);
TextView txtSubTitle = (TextView) rowview.findViewById(R.id.txtSubTitle);
CheckBox checkBox = (CheckBox) rowview.findViewById(R.id.checkbox);
imgView.setImageResource(item.getThumbnailResource());
txtTitle.setText(item.getTitle());
txtSubTitle.setText(item.getSubTitle());
return rowview;
}
}
因此,我可以在何处以及如何编写代码,以了解通过复选框选择了哪些项目?在行视图上单击“应用侦听器”,并在该clcik上切换复选框。还可以使用setTag、getTag更新项目,无论是否单击。然后在adapter中提供一个方法来返回带有选中标记的所有项
试试看:
//像这样更新您的getView
public View getView(final int position, View convertView, ViewGroup parent)
{
//System.out.println(position);
ListViewItem item = items.get(position);
View rowview = inflater.inflate(R.layout.list_item_row, parent, false);
ImageView imgView = (ImageView) rowview.findViewById(R.id.imgThumbnail);
TextView txtTitle = (TextView) rowview.findViewById(R.id.txtTitle);
TextView txtSubTitle = (TextView) rowview.findViewById(R.id.txtSubTitle);
CheckBox checkBox = (CheckBox) rowview.findViewById(R.id.checkbox);
imgView.setImageResource(item.getThumbnailResource());
txtTitle.setText(item.getTitle());
txtSubTitle.setText(item.getSubTitle());
rowview.setOnClickListener(new View.OnClickListener(e){
@override>
public void onClick(view v) {
if(item.getSelected() ){
item.setSelected(false);
checkBox set unselected resource
} else {
item.setSelected(true);
checkBox set selected resource
}
}
});
return rowview;
}
//添加一个获取选中项的方法
public List<ListViewItem> getSelectedItems() {
List<ListViewItem> selectedItems = new ArrayList<ListViewItem>();
for(ListViewItem item: items) {
if(item.getSelected())
selectedItems.add(item)
}
return selectedItems;
}
一个简单的解决方案:
例如,在ListViewItem模型上有一个使复选框状态保持为布尔值的参数
为复选框视图或整行实现侦听器,以便在复选框处理onClick时更新此新参数
然后,您只需在案例ArrayList项目中为新的ListView使用相同的集合。一种方法是,在传递或单击ArrayList以执行操作后,将每个选中的项目或整个视图添加到ArrayList中 我不知道您想在alertdialog中显示什么,但是您可以选中每个复选框,并检查BOOL isChecked是否为true
因此,您可以按其子级遍历整个listView,并检查BOOL是否为true,因此您只有选中的项。将此项添加到您的类中:
class ListViewItem {
private boolean isChecked = false;
public boolean isChecked(){
return this.isChecked;
}
public void setChecked(boolean checked){
this.isChecked = checked
}
在getView方法中添加以下内容:
if (items.get(position).isChecked){
checkbox.setChecked(true);
}else{
checkbox.setChecked(false);
}
要获取所有选中项,请将其添加到适配器类:
public ArrayList<ListViewItem> getCheckedItems(){
ArrayList<ListViewItem> checkedItem = new Arr......
For (ListViewItem items:item){
if (items.isChecked){
checkedItem.add(items);
}
}
return checkeditem;
}
你能告诉我怎么做吗?对不起,我是新手。。我不知道如何将复选框切换到rowview,以及如何使用setTag和getTag.It’s giving and error on the View.onClickListener我必须在哪里实现BOOL isChecked方法?我如何使用它,在哪里?谢谢你有对象复选框,例如你有:复选框cb=CheckBox findViewById。。。;然后你可以用ifcb.isChecked{do something}哦。。我在adapter类中编写这个方法?我在哪里以及如何使用它?例如,当您设置onClickListener时,您可以在侦听器中遍历所有listView子项并获取checkbox元素,并检查是否选中了该复选框。然后你可以用复选框做任何你想做的事情。但是对于onClickListener,我是为行还是为复选框设置它呢?非常感谢。。你能告诉我怎么做吗?我是新来的,我真的不知道怎么做。我有很多豆豆机器人。。我现在就试试,谢谢您必须在getView的复选框中使用它,如下所示:checkbox.setonclicklistenernewstatusonclicklistenerposition,checkbox
// private class StatusOnClickListener
private class StatusOnClickListener implements OnClickListener {
private CheckBox viewHolder;
private int _position;
public StatusOnClickListener(final int position, CheckBox _viewholder) {
viewHolder = _viewholder;
_position = position;
}
@Override
public void onClick(View v) {
if (viewHolder.isChecked()) {
List.get(_position).setChecked(true);
} else {
List.get(_position).setChecked(false);
}
}
}// end