2012-01-23 1 views
0

Я слежу за учебником this, и все было хорошо и легко, пока я не решил реализовать некоторые вещи самостоятельно. У меня есть следующий адаптер:Интерактивная строка ListView, созданная с использованием модели данных

package alphabet.fast.scroll; 

import java.util.List; 

import android.app.Activity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class interactiveArrayAdapter extends ArrayAdapter<model> { 

    private final List<model> list; 
    private final Activity context; 

    public interactiveArrayAdapter(Activity context, List<model> list) { 
     super(context, R.layout.custom_row, list); 
     this.context = context; 
     this.list = list; 
    } 

    static class ViewHolder { 
     protected ImageView avatar; 
     protected TextView name; 
     protected CheckBox checkbox; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = null; 
     if (convertView == null) { 
      LayoutInflater inflator = context.getLayoutInflater(); 
      view = inflator.inflate(R.layout.custom_row, null); 
      final ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.avatar = (ImageView) view.findViewById(R.id.avatar); 
      viewHolder.name = (TextView) view.findViewById(R.id.name); 
      viewHolder.checkbox = (CheckBox) view.findViewById(R.id.checkBox); 
      viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        model element = (model) viewHolder.checkbox.getTag(); 
        element.setSelected(buttonView.isChecked()); 
       } 
      }); 
      view.setTag(viewHolder); 
      viewHolder.checkbox.setTag(list.get(position)); 
     } else { 
      view = convertView; 
      ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position)); 
     } 
     ViewHolder holder = (ViewHolder) view.getTag(); 
     holder.avatar.setImageResource(R.drawable.icon2); 
     holder.name.setText(list.get(position).getName()); 
     holder.checkbox.setChecked(list.get(position).isSelected()); 
     return view; 
    } 
} 

эта модель:

package alphabet.fast.scroll; 

import android.graphics.drawable.Drawable; 

public class model { 

    private Drawable avatar; 
    private String name; 
    private boolean selected; 

    public model(String name) { 
     this.name = name; 
     selected = false; 
    } 

    public model(String name, Drawable avatar) { 
     this.avatar = avatar; 
     this.name = name; 
     selected = false; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public boolean isSelected() { 
     return selected; 
    } 

    public void setSelected(boolean selected) { 
     this.selected = selected; 
    } 
} 

и MainActivity:

package alphabet.fast.scroll; 

import java.util.ArrayList; 
import java.util.List; 

import android.app.ListActivity; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class tutorial extends ListActivity { 

    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     ArrayAdapter<model> adapter = new interactiveArrayAdapter(this, getModel()); 
     setListAdapter(adapter); 
    } 

     private List<model> getModel() { 
      List<model> list = new ArrayList<model>(); 
      list.add(get("Linux")); 
      list.add(get("Windows7")); 
      list.add(get("Android")); 
      list.add(get("iPhone")); 
      list.add(get2("Problem coming up here", getResources().getDrawable(R.drawable.icon))); 
      return list; 
     } 

     private model get(String s) { 
      return new model(s); 
     } 

     private model get2(String s, Drawable av) { 
      return new model(s, av); 
     } 
} 

Можете ли вы сказать мне, что случилось с моим кодом и почему мой конструктор с текст и drawable не работает должным образом - я не получаю обновленный avatar для строки Problem coming up here в ListView?

+0

Какой результат вы видите? – akkilis

+0

Результатом является представление по умолчанию, как в custom_row.xml, который я уже определил. –

+0

где код, в котором вы устанавливаете «изображение аватара из своего pojo» в imageView. Я вижу, что вы устанавливаете «icon2» из drawbles в коде в это изображение. – akkilis

ответ

1

вместо updateing в ImageView с аватара вы делаете
holder.avatar.setImageResource(R.drawable.icon2);

Скорее вы должны сделать метод в классе Аватар как
public Drwable getAvatarImage(){
return this.avatar;
}

Then you should do as below in your getView method:
holder.avatar.setImageResource (list.get (позиция) .getAvatarImage) ;

+0

Спасибо, только что понял! –

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