将所选数据的 ListView 显示到 textView 中的下一个 Activity
Posted
技术标签:
【中文标题】将所选数据的 ListView 显示到 textView 中的下一个 Activity【英文标题】:Display ListView of selected data to next Activity in textView 【发布时间】:2015-08-18 14:07:35 【问题描述】:在ListView
中,我的所有联系人都带有复选框。当我从列表中选择 2 个联系人并点击按钮时,所选列表的值应显示在下一个活动中。我怎样才能做到这一点?
它是我的 Activity 类:
public class ContactListActivity extends Activity implements OnItemClickListener
private ListView listView;
private List<ContactBean> list = new ArrayList<ContactBean>();
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.list);
listView.setOnItemClickListener(this);
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
while (phones.moveToNext())
String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
ContactBean objContact = new ContactBean();
objContact.setName(name);
objContact.setPhoneNo(phoneNumber);
list.add(objContact);
phones.close();
ContanctAdapter objAdapter = new ContanctAdapter(ContactListActivity.this, R.layout.alluser_row, list);
listView.setAdapter(objAdapter);
if (null != list && list.size() != 0)
Collections.sort(list, new Comparator<ContactBean>()
@Override
public int compare(ContactBean lhs, ContactBean rhs)
return lhs.getName().compareTo(rhs.getName());
);
AlertDialog alert = new AlertDialog.Builder(ContactListActivity.this).create();
alert.setTitle("");
alert.setMessage(list.size() + " Contact Found!!!");
alert.setButton("OK", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
dialog.dismiss();
);
alert.show();
else
showToast("No Contact Found!!!");
private void showToast(String msg)
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
@Override
public void onItemClick(AdapterView<?> listview, View v, int position, long id)
ContactBean bean = (ContactBean) listview.getItemAtPosition(position);
showCallDialog(bean.getName(), bean.getPhoneNo());
private void showCallDialog(String name, final String phoneNo)
AlertDialog alert = new AlertDialog.Builder(ContactListActivity.this).create();
alert.setTitle("Call?");
alert.setMessage("Are you sure want to call " + name + " ?");
alert.setButton("No", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
dialog.dismiss();
);
alert.setButton2("Yes", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
String phoneNumber = "tel:" + phoneNo;
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(phoneNumber));
startActivity(intent);
);
alert.show();
我的保存数据的适配器类是
public class ContanctAdapter extends ArrayAdapter<ContactBean>
private Activity activity;
private List<ContactBean> items;
private int row;
private LayoutInflater inflater = null;
public ContanctAdapter(Activity act, int row, List<ContactBean> items)
super(act, row, items);
this.activity = act;
this.row = row;
this.items = items;
this.inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@Override
public View getView(final int position, View convertView, ViewGroup parent)
ViewHolder holder;
if (convertView == null)
holder = new ViewHolder();
convertView = inflater.inflate(row, null);
holder.tvname = (TextView) convertView.findViewById(R.id.tvname);
holder.tvPhoneNo = (TextView) convertView.findViewById(R.id.tvphone);
holder.checkbox = (ImageView) convertView.findViewById(R.id.img_checkbox);
convertView.setTag(holder);
else
holder = (ViewHolder) convertView.getTag();
if ((items == null) || ((position + 1) > items.size()))
return convertView;
ContactBean objBean = items.get(position);
holder.checkbox.setSelected((objBean.getIsSelected() == 1) ? true : false);
if (holder.tvname != null && null != objBean.getName() && objBean.getName().trim().length() > 0)
holder.tvname.setText(html.fromHtml(objBean.getName()));
if (holder.tvPhoneNo != null && null != objBean.getPhoneNo() && objBean.getPhoneNo().trim().length() > 0)
holder.tvPhoneNo.setText(Html.fromHtml(objBean.getPhoneNo()));
holder.checkbox.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
items.get(position).isSelected = (v.isSelected()) ? 0 : 1;
notifyDataSetChanged();
);
return convertView;
public class ViewHolder
public TextView tvname, tvPhoneNo;
private ImageView checkbox;
【问题讨论】:
【参考方案1】:有多种方法可以实现:
方法一:
使用静态类的setter和getter方法:
创建静态类并从第一个活动中设置值并从第二个活动中获取值
方法二:
通过意图发布您的价值观
方法三:
使用数据库存储来自一个活动的数据并从另一个活动获取数据
方法四:
使用共享偏好
例子:
使用 Intent like this 发布值
在Shared preference 中发布值
Shared preference的另一个教程
【讨论】:
任何例子先生或任何链接? thnxx 提前,我非常需要它【参考方案2】:试试这个,可能对你有帮助
将此代码添加到您的 onitemClicklistener Listview 页面中
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position,
long id)
String TVNameitem = ((TextView) view.findViewById(R.id.tvname)).getText().toString();
String TVPhoneitem = ((TextView) view.findViewById(R.id.tvphone)).getText().toString();
Intent intent1 = new Intent(this,NextActivity.class);
intent1.putExtra("STRING_I_NEED_From_TVNAME", TVNameitem );
intent1.putExtra("STRING_I_NEED_From_TVPHONE",TVPhoneitem );
startActivity(intent1);
在 Nextactivty Oncreate 中添加此代码以获取值,然后在 Textview 中显示
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.find);
Bundle extras = getIntent().getExtras();
String VALUE_1= extras.getString("STRING_I_NEED_From_TVNAME");
String Value_2 =extras.getString("STRING_I_NEED_From_TVPHONE");
TextView Textview1=(TextView)findViewById(R.id.CompanyText);
Textview1.setText(VALUE_1+":"+Value_2);
【讨论】:
嗨 Mano thnxx 以便快速响应,但在我的列表中,我使用复选框作为选择器,并且只选择了列表的值,我必须在另一个活动中显示。 在你的复选框被选中获取你的字符串值,然后转移到下一个活动 Thnxx mano 这么多......它适用于选择列表视图,但我的要求是选择项目数量,然后当我单击下一个按钮时,所有记录都应显示在我拥有的 TextView 上选择... 尝试任何示例使用的项目选择,我只使用了列表视图项目选择。【参考方案3】:创建 getter 和 setter 以共享联系人详细信息。
public class GetContacts
private String contactNumber;
private String contactName;
GetContacts()// constructor without parameter.
public String getContactNumber()
return contactNumber;
public void setContactNumber(String contactNumber)
this.contactNumber = contactNumber;
public String getContactName()
return contactName;
public void setContactName(String contactName)
this.contactName = contactName;
现在将联系人值设置为 GetContact 类中的设置器
在您的第一个 Activity 中创建 GetContact 类的实例。
GetContact getContact= new GetContact();
并设置参数。
getContact.setContactNumber(phoneNumber);
getContact.setContactName(name);
现在是时候在第二个活动中获取这些值了。 像以前一样在第二个 Activity 中创建 GetContact 类的实例。
并获取参数,并显示到TextView中。
textView1.setText(getContact.getContactNumber(phoneNumber));
textView2.setText(getContact.getContactName(name));
【讨论】:
以上是关于将所选数据的 ListView 显示到 textView 中的下一个 Activity的主要内容,如果未能解决你的问题,请参考以下文章
Silverlight Combobox 将所选项目设置为 datagrid 的所选项目
具有多项选择的 ExpandableListView 将所选项目保存到数组中