2012-04-27 15 views
0

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

マイCustomAdapter getView()機能で

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; 

} 

ルックの下にいくつかのCodesnippets、これは、ユーザがアイテムのいずれかを押したときに、私が実行したいOnClickListener()メソッドが含まれていますListViewの場合、関数はToastをオブジェクトのget()メソッド

で呼び出す必要があります10

しかし、動作しません。どのように私はこの作業を完了することができます誰も知っていますか?前もって感謝します。私はいただきました!間違っていることがわかりました

UPDATE

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

+0

エラーが発生していますか? –

+0

私の編集を見てください:) –

+0

私はあなたを取得しませんでしたか? –

答えて

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); 

は最後に、私はImageButton

holder.call.setOnClickListener(new OnClickListener() { 

     public void onClick(View arg0) { 


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

     } 
    }); 

みんなありがとうにOnClickListenerを追加しました! :)

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(); 
0

を取得するリストビューを使用して、このリスナーをクリックした項目の場合:

listView.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     // The position is passed here, do as you please 
    } 
} 
+0

これはCustomAdapterクラスの外部でのみ機能します。 ListViewのレイアウトからImageButtonを使用したいと思います。 –

関連する問題