1

行ごとに 1 つのボタンを持つ ListView があります。行がクリックされたときにデータを取得する必要がある場合は、onItemClickListener 内で次のことを行うのは非常に簡単です。

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            CustomType type = (CustomType) arg0.getItemAtPosition(arg2);        //get data related to position arg2 item
        }
    });

実際には、行自体ではなく、ListView の行のボタンがクリックされたときに、データ (つまり、CustomType オブジェクト) を取得する必要があります。OnClickListener にはパラメーターとしてのようなものがないのでAdapterView<?>(明らかに)、これをどのように処理できるか知りたいです。

これまでのところ、リストビューであるボタンの親を取得し、クリックされたボタンがどの行の位置にあるかを何らかの方法で取得してから、次のようなものを呼び出しました myAdapter.getItem(position); 。こっち。

4

2 に答える 2

4

おそらくカスタムアダプタを使用しているListViewので、必要なことを行う最も簡単なgetView()方法は、アダプタのメソッドでpositionパラメータを のタグとして設定することButtonです。でタグを取得するOnClickListenerと、どの行がクリックされたかがわかります。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    //...
    button.setTag(Integer.valueOf(position));
    button.setOnClickListener(new OnClickListener() {

         @Override
         public void onClick(View v) {
              Integer rowPosition = (Integer)v.getTag();
         }
    });
    //...
}

行ビューからデータを抽出することもできます。行のすべてのデータがその行のビューで見つかる場合、これは機能します。

button.setOnClickListener(new OnClickListener() {

     @Override
     public void onClick(View v) {
          LinearLayout row = (LinearLayout)v.getParent(); I assumed your row root is a LinearLayout
         // now look for the row views in the row and extract the data from each one to
         // build the entire row's data 
     }
});
于 2013-04-28T07:53:03.240 に答える
0

CustomTypeオブジェクトを返すアダプタに 1 つのカスタム メソッドを追加します。

    public CustomType  getObjectDetails(int clickedPosition){
        CustomType  customType = this.list.get(clickedPosition);
        return customType ;
    }


 public void onItemClick(AdapterView<?> arg0, View arg1, int Position,long arg3) {
          CustomType type = getObjectDetails(Position);
     }
    });
于 2013-04-28T07:46:03.007 に答える