将所选数据的 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 将所选项目保存到数组中

封装下拉框控件!将查询到信息塞到下拉框中,将所选的内容截取并显示到静态框(联动显示)

将所选项目滚动到 JList 的顶部

从多个 Listview 行中获取每个 Spinner 的值?