我有一个带有自定义适配器的列表视图,该适配器包含两个TextViews
和一个ImageButton
。该列表包含我的班级Firm
的对象。当用户按下ImageButton
时,我希望通过Firm
从get()-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。
答案 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();
}
});
谢谢你们! :)