1

助けてください。

タイトルで述べたように、リストアダプターの行の個々の要素が、ユーザーがクリックしたものに応じて異なるアクションを起動するようにしようとしています。

それは「一種の」機能ですが、ユーザーのクリックに反応するのに長い時間がかかります。私が間違っているのは何ですか?

前もって感謝します、

だから私は次のコードを試しました

    @Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    // Get the item that was clicked
    Cursor c = (Cursor) this.getListAdapter().getItem(position);

    // c.moveToNext();

    prescription_id = c.getString(0);
    TextView pName = (TextView) v.findViewById(R.id.text2);
    TextView paName = (TextView) v.findViewById(R.id.text3);
    TextView rDateLabel = (TextView) v.findViewById(R.id.textView1);
    TextView rDate = (TextView) v.findViewById(R.id.text4);
    TextView rLeftLabel = (TextView) v.findViewById(R.id.text5);
    TextView rLeft = (TextView) v.findViewById(R.id.text6);
    ImageView callPhone = (ImageView) v.findViewById(R.id.Call_Pharmacy);

    pName.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    pa.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    rDateLabel.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    rDate.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    rLeftLabel.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    rLeft.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            goToPDetails();

        }
    });
    callPhone.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //Some Code
        }
    });
}
4

2 に答える 2

1

これらのすべての onClick リスナー (1 つの ListView 要素の単一のサブビューにあるもの) は、おそらく onListItemClick メソッドではなく、アダプターの getView メソッドにあるべきです (convertView 引数を適切に使用して)。

あなたのやり方はかなり間違っているようです。さまざまな onClick リスナーを適切な場所に正しく実装すれば、 onListItemClick メソッドは必要ないかもしれません。

于 2011-08-11T23:24:10.943 に答える
1

ここでは、リスト アイテムに xml ベースのレイアウトを使用することが重要です。個別にクリック可能な各ビューを 2 つの属性で設定するandroid:clickable="true"android:onClick="<your click handler>"、メソッドはこの署名で実装する必要があります:public void <your click handler> (View v) {...}アクティビティ内。余談ですが、クリック ハンドラーをオーバーラップ処理 (複数のビューに対して 1 つのクリック ハンドラー) に実装するか、ビューごとに 1 つのビュー ハンドラーを実装するかを設計上の決定を下す必要があります。前者は、クリックが実質的に類似している場合に最適です。後者は機能が異なる場合です。

次のステップは、クリック ハンドラーを実装することです。ここで重要なのは、ListView.getPositionForView(View v)を使用して、行、データ、およびクリックされたビューを関連付けることです。

ListActivity.onListItemClick()onClickを、リスト項目のルート レイアウトをクリックするためのキャッチ オールとして、および独自のハンドラー セットを持たないビューのキャッチ オールとして実装することを忘れないでください。

上記の手法は優れたパフォーマンスを発揮し、いくつかの Android API を利用して開発を高速化します。

リスナーをコードに実装する場合は、getView()よく調べて (darma が述べたように)、パフォーマンスのために (リストに複数の項目がある場合)、データと行を関連付ける方法に関する上記の説明でクリック リスナーを再利用してください。 .

于 2011-08-12T22:51:00.900 に答える