Listview中的自定义适配器,获取对象变量

时间:2012-04-27 17:24:35

标签: android

我有一个带有自定义适配器的列表视图,该适配器包含两个TextViews和一个ImageButton。该列表包含我的班级Firm的对象。当用户按下ImageButton时,我希望通过Firmget()-method对象获取一些信息。

下面的一些代码片段

我的CustomAdapter

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中的某个项时,我想要运行该方法,该函数应该引发Toast 1}}使用对象的get()方法

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

更新

我发现什么是错的,我忘了按钮是ImageButton而不是常规Button。但是我如何获得对象编号?我的Toast只根据所有对象从getNumber()方法生成随机数,更多指定我想要对象的编号,例如我列表中的位置3。

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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
    }
}

答案 2 :(得分: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(); 

        }
    });

谢谢你们! :)