2012-04-27 3 views
0

사용자 지정 어댑터를 사용하여 listview를 가지고 있는데 어댑터에 TextViewsImageButton이 포함되어 있습니다. 목록에는 내 클래스 Firm의 개체가 포함되어 있습니다. 사용자가 ImageButton을 누르면 get()-method을 사용하여 Firm 개체에서 정보를 얻고 싶습니다.Listview의 사용자 지정 어댑터에서 개체 변수를 가져 오는 중

내 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() 메서드

하지만 작동하지 않습니다. 아무도 내가이 일을 어떻게 완료 할 수 있는지 안다? 미리 감사드립니다. 잘못, 나는 버튼이 ImageButton보다는 일반 Button 것을 잊어 무슨

UPDATE는

나는 발견했습니다. 그러나 객체 수를 어떻게 얻을 수 있습니까? 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에 클릭이 리스너 사용했던 항목을 원하는 경우 : I에 의해 내 문제를 해결

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을 사용하고 싶습니다. –

관련 문제