0

我有一个带有自定义适配器的列表视图,该适配器包含两个TextViews和一个ImageButton。该列表包含我班级的对象Firm。当用户按下ImageButton我想从Firm对象中获取一些信息时,使用get()-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()我想在用户按下 中的一项时运行的方法,该函数应该使用对象的方法ListView引发 aToastget()

但它不起作用。有人知道我如何完成这项任务吗?提前致谢。

更新

我发现出了什么问题,我忘记了 Button 是 aImageButton而不是常规的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

如果您想要在 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 回答
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 回答