将所选数据的ListView显示到textView中的下一个Activity

时间:2015-06-04 05:41:51

标签: android android-activity android-listview

ListView这里,我的所有联系人都有复选框。当我从列表中选择2个联系人并点击一个按钮时,所选列表的值应显示在下一个活动中。我怎样才能做到这一点?

我的活动类

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;
}
}

3 个答案:

答案 0 :(得分:2)

有多种方法可以实现这一目标:

方法1:

使用静态类setter和getter方法:

创建静态类并从第一个活动设置值并从第二个活动中获取值

方法2:

通过意图发布你的价值

方法3:

使用数据库存储来自一个活动的数据并从其他活动中获取数据

方法4:

使用共享偏好

示例:

使用Intent like this

发布值

Shared preference

中发布值

Shared preference

的另一个教程

答案 1 :(得分:0)

试试这个,它可以帮到你

在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);

}

答案 2 :(得分:0)

创建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类

中的setter

在第一个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));