2012-04-27 51 views
0

我有一个自定义适配器的列表视图,该适配器包含两个TextViews和一个ImageButton。该列表包含我的班级Firm的对象。当用户按ImageButton我想从Firm对象中获取一些信息,通过使用get()-methodListview中的自定义适配器,获取对象变量

我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()功能有些Codesnippets,这包含了OnClickListener()的方法,我希望当用户按下在该项目中的一个运行ListView,功能应该提高Toast与对象的get()方法

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

UPDATE

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

+0

你会得到任何错误? – 2012-04-27 17:27:35

+0

看看我的编辑:) – 2012-04-27 17:34:13

+0

我没有让你? – 2012-04-27 17:37:18

回答

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

最后我添加了一个OnClickListenerImageButton

holder.call.setOnClickListener(new OnClickListener() { 

     public void onClick(View arg0) { 


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

     } 
    }); 

谢谢你们的新实例! :)

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使用监听器的项目:

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 .. – 2012-04-27 17:53:38

相关问题