BaseAdapterを使用して、独自のデータセットを持つオブジェクトのリストを渡します。リストビューの各行には、画像、説明などがあります。各オブジェクトの。BaseAdapterを設定したまま使用すると、エラーが発生せず、デバッガーとlogcatでオブジェクトのリストが有効であり、nullではないことを何度も確認しました。しかし、何らかの理由で、リストは正しい数のオブジェクトで作成されますが、ImageViews、TextViews、またはその他のいずれかがデータを取得することはありません。各行の唯一のものは、リスト行のxmlレイアウトで使用するのと同じデフォルトデータです。これは、各ビューのsetメソッドの呼び出しが何らかの理由で無視されているか、ビューのコンテンツが画面上の別のコンテキストまたは奇妙なものに渡されているようなものです。とにかくここに私のBaseAdapterクラスがあります:
class MaItemAdapter extends BaseAdapter{
List<Ma> mas = null;
Context cntx = null;
//LayoutInflater myInflater;
int itemPosition =0;
ViewHolder holder;
public MarkItemAdapter(Activity cntx,List<Ma> mas){
super();
this.mas = mas;
this.cntx = cntx;
//myInflater = LayoutInflater.from(cntx);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mas.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mas.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
itemPosition = position;
RelativeLayout rl = null;
Mark ma = mas.get(itemPosition);
if (convertView==null) {
rl = (RelativeLayout) LayoutInflater.from(cntx).inflate(
R.layout.ma_row_item, parent, false);
holder = new ViewHolder();
try{
holder.description = (TextView) rl.findViewById(R.id.ma_description);
holder.distance = (TextView) rl.findViewById(R.id.ma_distance);
holder.ma_image = (ImageView) rl.findViewById(R.id.ma_image);
holder.view_ma = (ImageButton) rl.findViewById(R.id.view_ma);
holder.rate_ma = (RatingBar) rl.findViewById(R.id.rate_ma);
holder.description.setText(ma.title);
holder.distance.setText(ma.getDistanceString());
holder.view_ma.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
//dostuff
}
});
if(ma.textImg!=null &&
!ma.textImg.isRecycled()){
holder.ma_image.setImageBitmap(ma.textImg);
}else{
holder.ma_image.setImageResource(R.raw.skyma);
}}catch(NullPointerException e){}
}else{
rl = (RelativeLayout) convertView;
}
//add logic for rating bar
return rl;
}
}
//convenience class to create views
private class ViewHolder{
ImageView ma_image;
TextView description;
TextView distance;
ImageButton view_ma;
RatingBar rate_ma;
public ViewHolder(){
ma_image = new ImageView(getApplicationContext());
description = new TextView(getApplicationContext());
distance = new TextView(getApplicationContext());
view_ma = new ImageButton(getApplicationContext());
rate_ma = new RatingBar(getApplicationContext());
}
}
}
私はいくつかのチュートリアルを実行しましたが、それらは正常に機能しますが、このセットアップを自分のアプリで使用すると、失敗します。正しい方向への助けは素晴らしいでしょう。もう1つ言及しなければならないのは、評価バーを押すと、4行または5行ごとに同じ評価がポップアップ表示されることです。どんな助けでも大歓迎です。