1

listviewの子のonClickイベントからクリックされた行を取得したい。クリックされたアイテムを取得することはできますが、そのイベントで行をクリックすることはできません。解決策を見つけるのを手伝ってください。

前もって感謝します!。私のコードは

public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        Holder holder = new Holder();

        pos = position;

        if(convertView == null)
        {

            System.out.println(position);


            convertView= inflater.inflate(R.layout.list_layout,(ViewGroup)parent.findViewById(R.layout.list_layout));

            holder.form_name  = (TextView) convertView.findViewById(R.id.list_text);
            holder.form_details = (TextView) convertView.findViewById(R.id.button_text);

            holder.form_details.setOnClickListener(new OnClickListener(){

                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    System.out.println(pos);
                                   //Here i am able to get clicked view but pos has always 
                    // last value
                    System.out.println("button view clicked for "+cipt_list.get(pos).cipt);

                }});


            System.out.println(holder.form_name);

            convertView.setTag(holder);


        }
        else{

            holder = (Holder) convertView.getTag();
        }

        ciptDetails cipt = cipt_list.get(position);

        holder.form_name.setText(cipt.cipt);

        return convertView;

    }
4

5 に答える 5

3

クリックリスナーを設定する前に:

holder.form_details.setId(position);

onClickメソッド内:

v.getId()あなたに位置を与えます。

于 2012-05-02T12:35:24.083 に答える
1

クリックイベントで位置を設定する2つの方法:1)OnItemClickListenerを使用する

        list.setOnItemClickListener(new OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                long arg3) {

        }
    };

2)getView()メソッドで、位置を取得します。これを「finalintposition」に変更するだけで、ビューのonClickListener()でアクセスできます。

public View getView(final int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    Holder holder = new Holder();

    pos = position;

    if(convertView == null)
    {

        System.out.println(position);


        convertView= inflater.inflate(R.layout.list_layout,(ViewGroup)parent.findViewById(R.layout.list_layout));

        holder.form_name  = (TextView) convertView.findViewById(R.id.list_text);
        holder.form_details = (TextView) convertView.findViewById(R.id.button_text);

        holder.form_details.setOnClickListener(new OnClickListener(){

            public void onClick(View v) {
                // you can access the position here
                System.out.println(pos);
                               //Here i am able to get clicked view but pos has always 
                // last value
                System.out.println("button view clicked for "+cipt_list.get(pos).cipt);

            }});


        System.out.println(holder.form_name);

        convertView.setTag(holder);


    }
    else{

        holder = (Holder) convertView.getTag();
    }

    ciptDetails cipt = cipt_list.get(position);

    holder.form_name.setText(cipt.cipt);

    return convertView;

}
于 2012-05-02T12:45:58.237 に答える
0

onListItemClickメソッドを実装する必要があります。3番目の引数は、アダプターでクリックした情報を保持する位置です。

于 2012-05-02T12:34:18.200 に答える
0

リストアダプタから行をクリックしたという意味ですか?その場合は、listAdatper.get(position)を使用してください

于 2012-05-02T12:36:45.767 に答える
0

簡単な修正は、次のように行のint値を使用してlistnerのサブクラスを作成することです。

private class MyClickListener implements View.OnClickListener{
  int row;
  public MyClickListener(int r){
    row = r;
  }
  //rest of your code goes here
  ...
}

今、あなたがそれを作成するとき、代わりにこれを呼ぶだけです

 holder.form_details.setOnClickListener(new MyClickListener(pos));
于 2012-05-02T12:39:05.067 に答える