2012-01-23 13 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行?的

+0

你看到的结果是什么? – akkilis

+0

结果是我已经定义的custom_row.xml中的默认视图。 –

+0

其中是您将“您的pojo的头像图像”设置为imageView的代码。我可以看到你正在设置“icon2”从代码中的绘图到图像视图 – 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

感谢队友,才意识到这一点! –

相关问题