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 データベースからテキストを取得します。

リストビューに表示されているアイテムをクリックすると、何かが起こるようになりました。クリックは登録されていますが、今のところ、ID に渡される番号を表示するだけの Toast が必要です (各行の主キー)。

ID でクエリを並べ替えていないため、arrayindex +1 を使用できません。

これが私の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に渡されている番号だけを表示するトーストが必要です。(各行の主キー)。

データベースの主キーが必要な場合は(アダプターによって異なります)、次の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> ididonItemClick()

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

(コンテキストで意味がある場合は、コンテナータイプをからArrayList<String>に変更することもできます。)ArrayList<Long>

于 2012-11-04T18:24:19.073 に答える