0

いくつかのレイヤー、相対、linearLayoutなどを持つListViewアイテム/セルがあります。ボタンのonClick内でv.getParent()を実行しようとしましたが、1レイヤー上に移動しました。onClickイベントハンドラー内の現在の要素のルートへの参照を取得するにはどうすればよいですか?

これが私のgetView()です

             Button v = (Button)findViewById(R.id.myButton);

             v.setOnClickListener(new OnClickListener(){
                     onClick(View v) {

                        //Right here I want to find another view inside the cell.
                        View otherView = ???.findViewById(R.id.myOtherViewInListItem); 
                             otherView.setBackgroundColor(...);
                        .........................................
                     } 
              });
4

2 に答える 2

0

このボタンは ListView 要素内にあると想像しています。この仮定に基づいて:

  1. OnClickListener を 1 つだけ作成します。あなたがやっていることは、adapter.getCount()OnClickリスナーを作成していて、狂ったようにメモリを浪費しています。

  2. ボタンを完全に削除し、OnItemClick を使用して ListView 要素全体のクリックを追跡すると、ビュー全体への参照が渡されます。

  3. 本当にボタンが必要な場合は、 getView 内に親への参照を保存します。次のようになります。

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // do whatever you're doing to get the view, let's call it v
        Button b = (Button)v.findViewById(/* your button id */ )
        b.setTag(v)
    }
    

次に、クリックリスナーで次のことができます。

    onClic(View v){
        View parent = (View)b.getTag();
    }

そして、その答えがあなたにとってうまくいくなら(私はそれがうまくいくことを知っています)、ダニエル・マルティヌスが指摘したようにそれを正しいものとして受け入れてください.

于 2012-12-19T10:27:18.733 に答える
0
 Inside onClick(View v)

just call v.getViewParent();  then you will have a view from which you can call the find for   the others.  
于 2012-12-19T10:28:23.797 に答える