我怎么知道使用复选框和列表视图选中了哪一行?
How can I know which row is checked using checkbox and listview?
下面是 ListView 项 Class
public class CategoryItem06 {
private String text;
private boolean checked;
public void setText(String text) {
this.text = text;
}
public String getText() {
return this.text;
}
// public void setCheck(boolean checked) {
this.checked = checked;
}
// public boolean getCheck() {
return this.checked;
}
}
下面是适配器
public class CategoryAdapter06 extends BaseAdapter {
public ArrayList<CategoryItem06> listViewItemList = new ArrayList<CategoryItem06>() ;
public CategoryAdapter06() {
}
@Override
public int getCount() {
return listViewItemList.size() ;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
final Context context = parent.getContext();
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.category_item06, parent, false);
}
TextView textTextView = (TextView) convertView.findViewById(R.id.textView1) ;
CheckBox checkBox=(CheckBox) convertView.findViewById(R.id.checkBoxMafia);
CategoryItem06 listViewItem = listViewItemList.get(position);
textTextView.setText(listViewItem.getText());
checkBox.setChecked(listViewItem.getCheck());
return convertView;
}
@Override
public long getItemId(int position) {
return position ;
}
@Override
public Object getItem(int position) {
return listViewItemList.get(position) ;
}
public void addItem( String text) {
CategoryItem06 item = new CategoryItem06();
item.setText(text);
listViewItemList.add(item);
}
}
下面是可检查的相对布局
public class CategoryCheckableRelativeLayout extends RelativeLayout implements Checkable {
public CategoryCheckableRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
// mIsChecked = false ;
}
@Override
public boolean isChecked() {
CheckBox cb = (CheckBox) findViewById(R.id.checkBoxMafia);
return cb.isChecked();
// return mIsChecked ;
}
@Override
public void toggle() {
CheckBox cb = (CheckBox) findViewById(R.id.checkBoxMafia);
setChecked(cb.isChecked() ? false : true);
// setChecked(mIsChecked ? false : true) ;
}
@Override
public void setChecked(boolean checked) {
CheckBox cb = (CheckBox) findViewById(R.id.checkBoxMafia);
if (cb.isChecked() != checked) {
cb.setChecked(checked);
}
}
}
下面是使用ListView
的Activity
public class CategorySelection06 extends AppCompatActivity {
Singleton s1 = Singleton.getInstance();
ListView listview;
// Creating Adapter
CategoryAdapter06 adapter = new CategoryAdapter06();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_category_selection06);
listview = (ListView) findViewById(R.id.listview1);
listview.setAdapter(adapter);
// Adding Items
adapter.addItem("Pets");
adapter.addItem("Singers");
adapter.addItem("Game");
adapter.addItem("Nations");
Button button = findViewById(R.id.button6);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (int i = 0; i < adapter.listViewItemList.size(); i++) {
if (adapter.listViewItemList.get(i).getCheck()) {
s1.ListViewCategory.add(adapter.listViewItemList.get(i).getText());
}
}
Intent intent = new Intent(getApplicationContext(), RoleSelection07.class);
startActivity(intent);
finish();
}
});
}
}
我的ListView的表单是这样的:TextView ------ Checkbox
我想做一个这样的Activity:如果用户选中复选框,那么选中行的文本将保存在单例中的 ArrayList 中 class。
例如,如果用户选中 "Pets" 和 "Nations" 的复选框,那么这些词会进入单例 class 中的 ArrayList s1.ListViewCategory。
我已经在 CategorySelectionActivity 中尝试了 for 循环和 if 语句,如下所示:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (int i = 0; i < adapter.listViewItemList.size(); i++) {
if (adapter.listViewItemList.get(i).getCheck()) {
s1.ListViewCategory.add(adapter.listViewItemList.get(i).getText());
}
}
Intent intent = new Intent(getApplicationContext(), RoleSelection07.class);
startActivity(intent);
finish();
}
但是,getCheck() 不起作用,因为 setCheck() 不在 CategoryAdapter 的 addItem() 中 class。
我试图将 setCheck() 放入 addItem() 方法中,但后来我必须将另一个参数放入 add() 中,然后出现红线和错误。
由于我是新手,所以我从网站上复制了这些代码,但我并没有真正了解如何使用CheckableRelativeLayout。
此布局显示复选框是否被选中,但不表示选中了哪一行。
综上所述,我的问题是'如何从选中的多行中获取文本,并知道选中了哪一行?
我知道问题很长,但我真的需要解决这个问题...
如果有人回答我的问题,我将非常感激谢谢
没人回答所以我自己解决了。
SparseBooleanArray checkedItems = listview.getCheckedItemPositions();
int count = adapter.getCount();
for (int i = 0; i < count; i++) {
if (checkedItems.get(i)) {
s1.ListViewCategory.add(adapter.listViewItemList.get(i).getText());
}
}
listview.clearChoices();
Intent intent = new Intent(getApplicationContext(), RoleSelection07.class);
startActivity(intent);
finish();
下面是 ListView 项 Class
public class CategoryItem06 { private String text; private boolean checked; public void setText(String text) { this.text = text; } public String getText() { return this.text; } // public void setCheck(boolean checked) { this.checked = checked; } // public boolean getCheck() { return this.checked; } }
下面是适配器
public class CategoryAdapter06 extends BaseAdapter { public ArrayList<CategoryItem06> listViewItemList = new ArrayList<CategoryItem06>() ; public CategoryAdapter06() { } @Override public int getCount() { return listViewItemList.size() ; } @Override public View getView(int position, View convertView, ViewGroup parent) { final int pos = position; final Context context = parent.getContext(); if (convertView == null) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.category_item06, parent, false); } TextView textTextView = (TextView) convertView.findViewById(R.id.textView1) ; CheckBox checkBox=(CheckBox) convertView.findViewById(R.id.checkBoxMafia); CategoryItem06 listViewItem = listViewItemList.get(position); textTextView.setText(listViewItem.getText()); checkBox.setChecked(listViewItem.getCheck()); return convertView; } @Override public long getItemId(int position) { return position ; } @Override public Object getItem(int position) { return listViewItemList.get(position) ; } public void addItem( String text) { CategoryItem06 item = new CategoryItem06(); item.setText(text); listViewItemList.add(item); } }
下面是可检查的相对布局
public class CategoryCheckableRelativeLayout extends RelativeLayout implements Checkable { public CategoryCheckableRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); // mIsChecked = false ; } @Override public boolean isChecked() { CheckBox cb = (CheckBox) findViewById(R.id.checkBoxMafia); return cb.isChecked(); // return mIsChecked ; } @Override public void toggle() { CheckBox cb = (CheckBox) findViewById(R.id.checkBoxMafia); setChecked(cb.isChecked() ? false : true); // setChecked(mIsChecked ? false : true) ; } @Override public void setChecked(boolean checked) { CheckBox cb = (CheckBox) findViewById(R.id.checkBoxMafia); if (cb.isChecked() != checked) { cb.setChecked(checked); } } }
下面是使用ListView
的Activitypublic class CategorySelection06 extends AppCompatActivity { Singleton s1 = Singleton.getInstance(); ListView listview; // Creating Adapter CategoryAdapter06 adapter = new CategoryAdapter06(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_category_selection06); listview = (ListView) findViewById(R.id.listview1); listview.setAdapter(adapter); // Adding Items adapter.addItem("Pets"); adapter.addItem("Singers"); adapter.addItem("Game"); adapter.addItem("Nations"); Button button = findViewById(R.id.button6); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { for (int i = 0; i < adapter.listViewItemList.size(); i++) { if (adapter.listViewItemList.get(i).getCheck()) { s1.ListViewCategory.add(adapter.listViewItemList.get(i).getText()); } } Intent intent = new Intent(getApplicationContext(), RoleSelection07.class); startActivity(intent); finish(); } }); } }
我的ListView的表单是这样的:TextView ------ Checkbox
我想做一个这样的Activity:如果用户选中复选框,那么选中行的文本将保存在单例中的 ArrayList 中 class。
例如,如果用户选中 "Pets" 和 "Nations" 的复选框,那么这些词会进入单例 class 中的 ArrayList s1.ListViewCategory。
我已经在 CategorySelectionActivity 中尝试了 for 循环和 if 语句,如下所示:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (int i = 0; i < adapter.listViewItemList.size(); i++) {
if (adapter.listViewItemList.get(i).getCheck()) {
s1.ListViewCategory.add(adapter.listViewItemList.get(i).getText());
}
}
Intent intent = new Intent(getApplicationContext(), RoleSelection07.class);
startActivity(intent);
finish();
}
但是,getCheck() 不起作用,因为 setCheck() 不在 CategoryAdapter 的 addItem() 中 class。
我试图将 setCheck() 放入 addItem() 方法中,但后来我必须将另一个参数放入 add() 中,然后出现红线和错误。
由于我是新手,所以我从网站上复制了这些代码,但我并没有真正了解如何使用CheckableRelativeLayout。
此布局显示复选框是否被选中,但不表示选中了哪一行。
综上所述,我的问题是'如何从选中的多行中获取文本,并知道选中了哪一行?
我知道问题很长,但我真的需要解决这个问题... 如果有人回答我的问题,我将非常感激谢谢
没人回答所以我自己解决了。
SparseBooleanArray checkedItems = listview.getCheckedItemPositions();
int count = adapter.getCount();
for (int i = 0; i < count; i++) {
if (checkedItems.get(i)) {
s1.ListViewCategory.add(adapter.listViewItemList.get(i).getText());
}
}
listview.clearChoices();
Intent intent = new Intent(getApplicationContext(), RoleSelection07.class);
startActivity(intent);
finish();