2012-04-27 3 views
0

У меня есть список с пользовательским адаптером, адаптер содержит два TextViews и один ImageButton. Список содержит объекты моего класса Firm. Когда пользователь нажимает ImageButton, я хочу получить информацию от объекта Firm, используя get()-method.Пользовательский адаптер в Listview, получая переменные объектов

Некоторые CodeSnippets находящиеся под

Мой 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 с использованием метода get() объекта

Но это не сработает. Кто-нибудь знает, как я могу выполнить эту задачу? Заранее спасибо.

UPDATE

Я нашел, что случилось, я забыл, что кнопка была ImageButton, а не регулярные Button. Но как я могу получить номер объекта? Мой тост просто генерирует случайные числа из метода 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); 

Наконец я добавил OnClickListener к ImageButton

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. Я хочу использовать ImageButton из макета ListView. –

Смежные вопросы