Android 如何从ListView中的单个项toast特定的文本ID

Android 如何从ListView中的单个项toast特定的文本ID,android,listview,rowid,onitemclick,Android,Listview,Rowid,Onitemclick,我正在尝试开发一款安卓应用程序,但我目前遇到了一些问题 我使用的自定义listview如下所示: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_conte

我正在尝试开发一款安卓应用程序,但我目前遇到了一些问题

我使用的自定义listview如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="20dp"
    android:paddingRight="20dp"
    android:paddingTop="10dp"
    android:paddingBottom="10dp" >

    <TextView
        android:id="@+id/name"
        style="@style/..."/>

    <TextView
        android:id="@+id/number"
        android:layout_below="@+id/..."
        style="@style/..." />

    <TextView
        android:id="@+id/id" 
        android:layout_below="@+id/..."
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="visible" />


</RelativeLayout>

这里的ID从我的SQLite数据库中获取他们的文本,在那里我通过Contacts表进行查询

现在,我希望在单击listview中显示的项目时发生一些事情。点击已注册,但现在我想要一个只显示传递到ID中的数字(每行的主键)的Toast

我不能使用arrayindex+1,因为我没有按id排序查询

这是我的McClick:

contactList.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {

            Toast.makeText(Contacts.this,"My unique rowID should be presented here.",
                      Toast.LENGTH_SHORT).show();

        }

    });
contactList.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
Toast.makeText(Contacts.this,“我唯一的rowID应该在这里显示。”,
吐司。长度(短)。show();
}
});
我将唯一的ID发送到textview,因为我相信这会使单击特定项目时提取该信息更容易

我的基本适配器:

public class ListViewCustomAdapter extends BaseAdapter {

    public ArrayList<String> name;
    public ArrayList<String> number;
    public ArrayList<String> id;

    public Activity context;

    public LayoutInflater inflater;

    public ListViewCustomAdapter(Activity context,
            ArrayList<String> name, ArrayList<String> number, ArrayList<String> id) {
        // TODO Auto-generated constructor stub
        super();
        this.context = context;
        this.name = name;
        this.number = number;
        this.id = id;

        this.inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public int getCount() {
        // TODO Auto-generated method stub
        return name.size();
    }

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    public long getItemId(int id) {

        return id;
    }

    public class ViewHolder {
        TextView txtViewName;
        TextView txtViewNumber;
        TextView txtViewId;

    }


    public View getView(int position, View convertview, ViewGroup parent) {
        // TODO Auto-generated method stub

        ViewHolder holder;
        if (convertview == null) {
            holder = new ViewHolder();
            convertview = inflater.inflate(R.layout.listview_row, null);

            holder.txtViewName = (TextView) convertview
                    .findViewById(R.id.name);
            holder.txtViewNumber = (TextView) convertview
                    .findViewById(R.id.number);
            holder.txtViewId = (TextView) convertview
                    .findViewById(R.id.id);

            convertview.setTag(holder);
        } else {
            holder = (ViewHolder) convertview.getTag();
        }

        holder.txtViewName.setText(name.get(position));
        holder.txtViewNumber.setText(number.get(position));
        holder.txtViewId.setText(id.get(position));

        return convertview;
    }
}
公共类ListViewCustomAdapter扩展了BaseAdapter{
公共数组列表名;
公共阵列列表编号;
公共阵列列表id;
公共活动语境;
公共场所;充气机;
公共ListViewCustomAdapter(活动上下文,
ArrayList名称、ArrayList编号、ArrayList id){
//TODO自动生成的构造函数存根
超级();
this.context=上下文;
this.name=名称;
这个数字=数字;
this.id=id;
this.inflater=(LayoutInflater)上下文
.getSystemService(上下文布局\充气机\服务);
}
public int getCount(){
//TODO自动生成的方法存根
返回name.size();
}
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回null;
}
公共长getItemId(int id){
返回id;
}
公共类视图持有者{
TextView txtViewName;
TextView txtViewNumber;
TextView-txtViewId;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
视窗座;
if(convertview==null){
holder=新的ViewHolder();
convertview=充气机。充气(R.layout.listview_行,空);
holder.txtViewName=(TextView)convertview
.findviewbyd(R.id.name);
holder.txtViewNumber=(TextView)convertview
.findViewById(R.id.number);
holder.txtViewId=(TextView)convertview
.findviewbyd(R.id.id);
convertview.setTag(支架);
}否则{
holder=(ViewHolder)convertview.getTag();
}
holder.txtViewName.setText(name.get(position));
holder.txtViewNumber.setText(number.get(position));
holder.txtViewId.setText(id.get(position));
返回视图;
}
}
任何帮助都将不胜感激

现在我想要一个吐司,它只显示传递到ID中的数字(每行的主键)

如果您希望数据库中的主键(取决于适配器),则它应该是传递给
onItemClick()的
id
参数:


(如果在您的上下文中有意义,您甚至可以将容器类型从
ArrayList
更改为
ArrayList

这是每个listview元素的xml吗?是的。我的主键目前正在传递到@+id/id。因此,第一个项目将获得1,第二个项目将获得2,第三个项目将获得3等。如果我通过联系人订购,我现在也添加了适配器。当我使用getId并返回id时,它会给我ArrayList索引。
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // Use id
    Toast.makeText(Contacts.this, id + "",Toast.LENGTH_SHORT).show();

    // Or you can find it yourself
    TextView idTV = (TextView) view.findViewById(R.id.id);
    Toast.makeText(Contacts.this, idTV.getText().toString(),Toast.LENGTH_SHORT).show();
}
public long getItemId(int position) {
    return Long.parseLong(id.get(position));
}