android - 单击 ListView 上的监听器

标签 android listview listadapter onselect simplecursoradapter

我已经从 SDK 页面修改了这个示例,以从手机中获取所有联系人组并显示它们。但是,我不知道如何单击其中一个,然后使用 Groups._ID 做其他事情。谁能教我如何在此列表中获得点击/选择监听器?

MyListAdapter.java

package com.example.simplelist;

import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.Groups;
import android.widget.ListAdapter;
import android.widget.SimpleCursorAdapter;

public class MyListAdapter extends ListActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.custom_list_activity_view);
        Cursor mCursor = this.getContentResolver().query(Groups.CONTENT_URI, null, null, null, null);
        startManagingCursor(mCursor);
        ListAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item, mCursor, new String[] {Groups.NAME, Groups._ID}, new int[] {android.R.id.text1, android.R.id.text2});
        setListAdapter(adapter);
    }
}

custom_list_activity_view.xml

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

     <ListView android:id="@id/android:list"
               android:layout_width="fill_parent"
               android:layout_height="fill_parent"
               android:background="#00FF00"
               android:layout_weight="1"
               android:drawSelectorOnTop="false" android:choiceMode="singleChoice" android:clickable="true" />

     <TextView android:id="@id/android:empty"
               android:layout_width="fill_parent"
               android:layout_height="fill_parent"
               android:background="#FF0000"
               android:text="No data"/>
 </LinearLayout>

two_line_list_item.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="wrap_content"
     android:orientation="vertical">

     <TextView android:id="@+id/text1"
         android:textSize="16sp"
         android:textStyle="bold"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"/>

     <TextView android:id="@+id/text2"
         android:textSize="16sp"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"/>
 </LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.simplelist"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="3" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MyListAdapter"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-permission android:name="android.permission.READ_CONTACTS" />
</manifest>

最佳答案

这应该允许您以您想要的方式与所选项目进行交互。

MyListAdapter.java

package com.example.simplelist;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.ListActivity;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.Groups;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class MyListAdapter extends ListActivity {

    List<ContactGroup> groups = new ArrayList<ContactGroup>(); 

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        this.groups = getContacts();
        ContactGroupAdapter cAdapter = new ContactGroupAdapter(this); 
        setListAdapter(cAdapter);
    }

    private List<ContactGroup> getContacts(){
        List<ContactGroup> grps = new ArrayList<ContactGroup>();
        ContentResolver cr = getContentResolver();
        Cursor groupCur = cr.query(Groups.CONTENT_URI, null, null, null, null);
        if (groupCur.getCount() > 0) {
            while (groupCur.moveToNext()) {
                ContactGroup newGroup = new ContactGroup();
                newGroup.Id = groupCur.getString(groupCur.getColumnIndex(Groups._ID));
                newGroup.Name = groupCur.getString(groupCur.getColumnIndex(Groups.NAME));
                grps.add(newGroup);
            }
        }
        return grps;
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        ContactGroup selectedGroup = new ContactGroup();
        selectedGroup = groups.get(position);
        Toast.makeText(getBaseContext(), selectedGroup.Name + " ID #" + selectedGroup.Id, 1).show();
    }


    public class ContactGroupAdapter extends BaseAdapter{
        public ContactGroupAdapter(Context c) {
            mContext = c;
        }
        @Override
        public int getCount() {
            return groups.size();
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if(convertView == null){
                LayoutInflater vi = LayoutInflater.from(this.mContext);  
                convertView = vi.inflate(R.layout.two_line_list_item, null);
                holder = new ViewHolder();
                convertView.setTag(holder); 
            }
            else {
                //Get view holder back
                holder = (ViewHolder) convertView.getTag();
            }
            ContactGroup c = groups.get(position);
            if (c != null) {
                //Name
                holder.toptext = (TextView) convertView.findViewById(R.id.text1);
                holder.toptext.setText(c.Name);
                //ID
                holder.bottomtext = (TextView) convertView.findViewById(R.id.text2);
                holder.bottomtext.setText(c.Id);
            }
            return convertView;
        }
        private Context mContext;

    }
    public static class ViewHolder {
        TextView toptext;
        TextView bottomtext;
    }

    public class ContactGroup{
        public String Id;
        public String Name;
    }

}

two_line_list_item.xml

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

         <TextView android:id="@+id/text1"
         android:textSize="16sp"
         android:textStyle="bold"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"/>

     <TextView android:id="@+id/text2"
         android:textSize="16sp"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"/>

</LinearLayout>

关于android - 单击 ListView 上的监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5170794/

相关文章:

c# - 如何根据displayindex获取listview的列标题列表?

Android - 如何创建从右到左的水平ListView?

android - adapter 的内容发生了变化但是 ListView 没有收到通知,后台没有更新

android - 我在 Android 中使用 ListActivity 时发生内存泄漏

android - Android M版本中如何根据指纹识别用户?

java - 二进制 XML 文件行 #23 : Error inflating class com. example.caesar.library.ChipView

android - 使用键盘时,ListView 不会滚动到末尾

android - 选择哪个适配器?

android - j 的异步 ProgressBar 卡住

android - 如何从android中的VRPanorama View中删除信息标签