Android 如何在复选框中获取listview值?
我的列表视图左侧为文本,右侧为复选框。我的列表视图显示包含短信正文和地址的收件箱。现在,我想在单击复选框时获取地址,并使用按钮保存地址。我的复选框可单击,而我的列表视图显示为文本,因此无法单击。 我的代码如下:Android 如何在复选框中获取listview值?,android,sms,android-listview,Android,Sms,Android Listview,我的列表视图左侧为文本,右侧为复选框。我的列表视图显示包含短信正文和地址的收件箱。现在,我想在单击复选框时获取地址,并使用按钮保存地址。我的复选框可单击,而我的列表视图显示为文本,因此无法单击。 我的代码如下: public class SMSInbox extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedIns
public class SMSInbox extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.inbox);
final ListView lViewSMS = (ListView) findViewById(R.id.list);
if(fetchInbox()!=null)
{
String[] from = new String[]{};
int to = R.id.text1;
ArrayAdapter adapter = new ArrayAdapter(this,R.layout.row,to,fetchInbox());
lViewSMS.setAdapter(adapter);
}
}
public ArrayList fetchInbox()
{
ArrayList sms = new ArrayList();
Uri uriSms = Uri.parse("content://sms/inbox");
Cursor cursor = getContentResolver().query(uriSms, new String[]{"_id", "address", "date", "body"},null,null,null);
cursor.moveToFirst();
while (cursor.moveToNext())
{
String address = cursor.getString(1);
String body = cursor.getString(3);
System.out.println("======> Mobile number => "+address);
System.out.println("=====> SMS Text => "+body);
sms.add("Address=> "+address+"\n SMS => "+body);
}
return sms;
}
}
我的XML代码inbox.XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button android:id="@+id/get_view_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Get CheckBox" />
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
让我知道如何通过复选框单击从smsinbox.java获取地址。以及如何确认复选框获取地址
请帮我解决这个问题。我也有同样的问题,请查看我的问题和答案
最好的在适配器中添加此方法: 首先为所选项目列表定义新的ArrayList: ArrayList ListSelected=新建ArrayList 创建一个返回列表的方法:
/**
* create this method for return new value in list item selected
* @return
*/
private List<String> getSelectedString(){
return itemSelected;
}
如果你还搞不清楚这个过程,我发现了一篇有用的文章,请参考。也许在那里你会找到你需要的。希望有帮助。伙计,你从来没有使用过InteractiveArrayAdapter,你创建了它,但使用了普通的ArrayAdapter。。。我在这里遗漏了什么吗??…您将使用哪一个InteractiveArrayAdapter或ArrayAdapter?让我清楚地了解如何使用InteractiveArrayAdapter而不是代码格式的ArrayAdapter。而不是使用ArrayAdapter=new ArrayAdapter this,R.layout.row,to,fetchInbox;您将使用InteractiveArrayAdapter=new InteractiveArrayAdapter此,型号。。。。。顺便说一句,两者都是正确的,但问题是你认为你在使用一些东西,而实际上你不是,因为你在使用ArrayAdapter。嗯,divyaaa aurr kyaa haal chaal hahaha:D就你的回答而言,我可以给出完整的代码,基本上会帮助你你想用你的按钮保存地址。。?您正在使用web服务保存您的地址吗,或者你只是donna wsave你只是想点击复选框就得到地址?Richa,我无法获取,因为我是android新手。请解释我必须更改什么才能在复选框单击时获取listview值。我看到了您的代码。在那里,您可以单击您的listview。然后它可以响应,我们可以通过toast进行确认。但我在textview中显示listview。我无法单击listview值,因为它仅显示为文本。但我可以单击复选框。我如何使用toast实现复选框的响应。有什么想法吗?确保行下的视图为focusable=false和clickable=false我如您所说在xml中输入false。即使复选框出现问题,也无法选择复选框。至少我想通过toast检查复选框是否被单击
public class InteractiveArrayAdapter extends ArrayAdapter<Model> {
private final List<Model> list;
private final Activity context;
public InteractiveArrayAdapter(Activity context, List<Model> list) {
super(context, R.layout.row, list);
this.context = context;
this.list = list;
}
static class ViewHolder {
protected TextView text;
protected CheckBox checkbox;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.row, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.text1);
viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
viewHolder.checkbox
.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
Model element = (Model) viewHolder.checkbox
.getTag();
element.setSelected(buttonView.isChecked());
}
});
view.setTag(viewHolder);
viewHolder.checkbox.setTag(list.get(position));
} else {
view = convertView;
((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(list.get(position).getName());
holder.checkbox.setChecked(list.get(position).isSelected());
return view;
}}
public class Model {
private String name;
private boolean selected;
public Model(String name) {
this.name = name;
selected = false;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}}
/**
* create this method for return new value in list item selected
* @return
*/
private List<String> getSelectedString(){
return itemSelected;
}
holder.cbItem.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if(b){
itemSelected.add(itemName);
String jsonString = gson.toJson(getSelectedString());
edit.putString(Constants.KEY_SHARED,jsonString);
edit.commit();
}else{
itemSelected.remove(itemName);
String jsonString = gson.toJson(getSelectedString());
edit.putString(Constants.KEY_SHARED,jsonString);
edit.commit();
}
}
});