0

我正在尝试开发一个 Android 应用程序,但我目前遇到了一些问题。

我使用如下所示的自定义列表视图:

<?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 数据库中获取他们的文本,我通过我的联系人表查询。

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

我不能使用 arrayindex +1,因为我不按 id 对查询进行排序。

这是我的onItemClick:

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

        }

    });

我将唯一 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;
    }
}

任何帮助,将不胜感激。

4

1 回答 1

1

现在我想要一个只显示正在传递到 ID 的数字的 Toast。(每行的主键)。

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

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

添加
现在您发布了您的适配器,我看到您可以调整您的getItemId()方法以从您的返回数据ArrayList<String> id以使id参数onItemClick()正常工作:

public long getItemId(int position) {
    return Long.parseLong(id.get(position));
}

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

于 2012-11-04T18:24:19.073 回答