java - android ListView onclick

标签 java android listview android-listview android-contacts

我正在创建一个应用程序,其中包含联系人列表。目前,该列表可以正常工作,并按照我想要的方式显示我的所有联系人。不过我需要给它们添加一个点击功能。我一按其中一个就想给他们打电话。我怎样才能做到这一点?由于 rss 阅读器,我在同一 Activity 中已经有一个 onListItemClick 方法。我怎样才能过滤掉它?看看我的代码:

        //Load contacts into ListView on people screen
    contactListView = (ListView) findViewById(R.id.contactsListView);
    contactstock = new ArrayList<ContactStock>();

    mCursor = managedQuery(ContactsContract.Data.CONTENT_URI, null, Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'", null,
            ContactsContract.Data.DISPLAY_NAME + " ASC");
    int number = mCursor.getColumnIndex(Phone.NUMBER);      
    int name = mCursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME);
    while (mCursor.moveToNext()) {
        String phName = mCursor.getString(name);
        String phNumber = mCursor.getString(number);
        contactstock.add(new ContactStock(phName, phNumber));
    }
    contactListView.setAdapter(new ContactListAdapter(MainActivity.this,
            contactstock));

ContactStock.java:

public class ContactStock {

    private String name;
    private String number;

    public ContactStock(String name, String number) {
        this.name = name;
       this.number = number;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getName() {
        return this.name;
    }

    public String getNumber() {
        return this.number;
    }

}

ContactListAdapter.java:

public class ContactListAdapter extends ArrayAdapter {
private final Activity activity;
private final List stocks;

public ContactListAdapter(Activity activity, List objects) {
    super(activity, R.layout.listview_detail_tab_contact_list, objects);
    this.activity = activity;
    this.stocks = objects;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View rowView = convertView;
    ContactStockView sv = null;
    if (rowView == null) {
        // Get a new instance of the row layout view
        LayoutInflater inflater = activity.getLayoutInflater();
        rowView = inflater.inflate(
                R.layout.listview_detail_tab_contact_list, null);

        // Hold the view objects in an object,
        // so they don't need to be re-fetched
        sv = new ContactStockView();
        sv.name = (TextView) rowView.findViewById(R.id.contact_name);

        sv.number = (TextView) rowView.findViewById(R.id.contact_number);

        // Cache the view objects in the tag,
        // so they can be re-accessed later
        rowView.setTag(sv);
    } else {
        sv = (ContactStockView) rowView.getTag();
    }
    // Transfer the stock data from the data object
    // to the view objects
    ContactStock currentStock = (ContactStock) stocks.get(position);
    sv.name.setText(currentStock.getName());
    sv.number.setText(currentStock.getNumber());

    // TODO Auto-generated method stub
    return rowView;
}

protected static class ContactStockView {
    protected TextView name;
    protected TextView number;
}
}

我当前的 ListView 代码(用于RSS查看器):

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    Uri uri = Uri.parse(links.get(position).toString());
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(intent);
}

ListView 行 xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >


<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:src="@drawable/defaultavatar" />

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >


    <TextView
        android:id="@+id/contact_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="5dp"
        android:text="Who am I"
        android:textAppearance="?android:attr/textAppearanceLarge" />


    <TextView
        android:id="@+id/contact_number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:text="000000000" />

</LinearLayout> 

</LinearLayout>

我使用此代码从我点击的联系人那里获取了电话号码:

contactstock.get(arg2).getNumber()

最佳答案

您应该设置两个 ListView 并为每个 ListView 设置 onItemClickListener。

ListView l1 = (ListView)findViewById(R.id.list1);
ListView l2 = (ListView)findViewById(R.id.list2);

// listener for the first one 
l1.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub

        }

    });

 // listener for the other
 l2.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub

        }

    });

关于java - android ListView onclick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14663290/

相关文章:

java - 循环正好一秒

java - 这种情况的具体数据类型?

java - 我可以在Java中自定义矩阵的索引吗?

android - 在某些设备中甚至使用 START_STICKY 后杀死应用程序后服务不会再次启动

android - Visual Studio 多设备混合应用程序如何向 AndroidManifest.xml 添加使用权限

android - 无法使用简单的游标适配器 android 在 ListView 中获取值?

java - java 中的纪念品。可变状态

android - Jetpack compose 中 Unresolved 修改器方法引用

java - 具有异步任务的 fragment 中的 ListView

android - 将动态字符串数组添加到android中的动态 ListView