0

カスタムアダプターを使用したリストビューがあり、アダプターには 2TextViewsつと 1 つが含まれていますImageButton。リストには my class のオブジェクトが含まれていますFirm。ユーザーが を押したときに、を使用してオブジェクトImageButtonから情報を取得したい。Firmget()-method

その下にいくつかのコードスニペット

私のカスタムアダプター

import java.util.Vector;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class CustomAdapter extends ArrayAdapter<Firm>
{
 Context context;
 int layoutResourceId;   
 static String datesort; 
 ImageButton call;
 Firm mrb;

 Firm currentMRB;
 Vector<Firm> data;
/** Called when the activity is first created. */
// TODO Auto-generated constructor stub
public CustomAdapter(Context context, int layoutResourceId, Vector<Firm> data) 
{
    super(context,layoutResourceId,data);
    this.layoutResourceId = layoutResourceId;
    this.context=context;
    this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    View row = convertView;
    MyStringReaderHolder holder;

    if(row==null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent,false);

        holder= new MyStringReaderHolder();

        holder.gtumcaTvFirstName =(TextView)row.findViewById(R.id.gtumcaTvFirstName);
        holder.gtumcaTvLastName =(TextView)row.findViewById(R.id.gtumcaTvLastName);
        call = (ImageButton)row.findViewById(R.id.imageButton1);

        row.setTag(holder);
    }
    else
    {
        holder=(MyStringReaderHolder) row.getTag();
    }

    mrb =data.elementAt(position);
    System.out.println("Position="+position);

    holder.gtumcaTvFirstName.setText(mrb.getCompanyName());
    int price = (int)mrb.getPrice();
    String priceString = Integer.toString(price);
    holder.gtumcaTvLastName.setText(priceString);


    call.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {


            Toast.makeText(context, mrb.getNumber(), Toast.LENGTH_LONG).show(); 

        }
    });

    return row;

}

getView()関数を見てください。これにはOnClickListener()、ユーザーが の項目のいずれかを押したときに実行したいメソッドが含まれています。関数は、オブジェクトのメソッドでListViewa を発生させる必要がありますToastget()

しかし、うまくいきません。このタスクを完了する方法を知っている人はいますか? 前もって感謝します。

アップデート

Button がImageButton通常の ではなく であることを忘れていましたButton。しかし、どうすればオブジェクト番号を取得できますか? 私の Toast は、すべてのオブジェクトに基づいて getNumber() メソッドから乱数を生成するだけです。より具体的には、たとえばリストの 3 番目の位置にあるオブジェクトの番号が必要です。

4

3 に答える 3

1
call = (ImageButton)row.findViewById(R.id.imageButton1);
call.setFocusable(false);   <----- add this line
row.setTag(holder);

数値使用位置変数を取得するには

Toast.makeText(context, ""+position, Toast.LENGTH_LONG).show();
于 2012-04-27T17:43:37.617 に答える
0

私はこのようにすることで問題を解決しました:

 static class MyStringReaderHolder
 {
    TextView gtumcaTvFirstName,gtumcaTvLastName,gtumcaTvBirthDate;
    ImageView gtumcaIvIcon;
    ImageButton call;
 }

そして、静的クラスの新しいインスタンスを作成します

        holder= new MyStringReaderHolder();
        holder.call = (ImageButton)row.findViewById(R.id.imageButton1);
        holder.call.setFocusable(false);

最後に私はにを追加しOnClickListenerましたImageButton

holder.call.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {


        Toast.makeText(context,  "" +  data.elementAt(position).getCompanyName(), Toast.LENGTH_SHORT).show(); 

        }
    });

みんなありがとう!:)

于 2012-04-27T18:00:33.933 に答える
0

ListView でクリックされたアイテムが必要な場合は、次のリスナーを使用します。

listView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
       // The position is passed here, do as you please
    }
}
于 2012-04-27T17:48:53.860 に答える