0

この質問のタイトルは同じですが、技術的な問題は異なります。

こんにちは私はSQLiteからデータを取得しようとしていますが、リストビューに最後のアイテムしか表示できません。私は別の異なる解決策を試しましたが、成功しませんでした。問題はSQLiteからアイテムを取得することではなく(すべてのアイテムをフェッチできます)、リストビューでアダプターを使用してアイテムを表示することです。

これが私のコードです。
ListActivity.java

 db=new DBHelper(getBaseContext());
 db.getWritableDatabase();
try {
final DBHelper m = new DBHelper(getBaseContext());
final List<GetSet> NotesWiseProfile = m.getBabyDetails();
for (final GetSet cn : NotesWiseProfile) {
    counter++;              
    String babyName = cn.getBabyName();
    String babyImage = cn.getBabyImage();               
    int babyId = cn.getBabyId();
    BabyData baby_data[]  = new BabyData[]
    {                       
         new BabyData(R.drawable.ic_launcher, babyName,babyId),
            };
        adapter = new MobileArrayAdapter(this, 
                R.layout.list_row, baby_data);
        listView1.invalidateViews();
        listView1.setAdapter(adapter);
  }
}
catch (Exception e) {
}  

BabyData.java

public class BabyData {
public int icon;
public String title;
public int babyid;
public BabyData(){
    super();
}    
public BabyData(int icon, String title,int babyId) {
    super();
    this.icon = icon;
    this.title = title;
    babyid = babyId;
}

}

MobileArrayAdapter.java

public class MobileArrayAdapter extends ArrayAdapter<BabyData>{

Context context; 
int layoutResourceId;    
BabyData data[] = null;

public MobileArrayAdapter(Context context, int layoutResourceId, BabyData[] 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;
    DataHolder holder = null;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new DataHolder ();
        holder.imgIcon = (ImageView)row.findViewById(R.id.imvBabyFace);
        holder.txtTitle = (TextView)row.findViewById(R.id.tvbabyNameList);
        holder.txtBabyId = (TextView)row.findViewById(R.id.tvBabyId);

        row.setTag(holder);
    }
    else
    {
        holder = (DataHolder )row.getTag();
    }

    BabyData weather = data[position];
    holder.txtTitle.setText(weather.title);
    holder.txtBabyId.setText(String.valueOf(weather.babyid));
    holder.imgIcon.setImageResource(weather.icon);

    return row;
}

static class DataHolder 
{
    ImageView imgIcon;
    TextView txtTitle;
    TextView txtBabyId;
}
}   

コードの何が問題なのかわかりません。ヒントや参考資料を教えてください。

前もって感謝します。

4

2 に答える 2

3

次のように、リストビュー宣言を for ループの外に置きます。

BabyData baby_data[]  = new BabyData[NotesWiseProfile.size()];

for (final GetSet cn : NotesWiseProfile) {

  String babyName = cn.getBabyName();
  String babyImage = cn.getBabyImage();               
  int babyId = cn.getBabyId();
  baby_data[counter] = new BabyData(R.drawable.ic_launcher, babyName,babyId);
  counter++;    
}
adapter = new MobileArrayAdapter(this, 
            R.layout.list_row, baby_data);
    listView1.invalidateViews();
    listView1.setAdapter(adapter);
于 2013-02-25T07:11:32.487 に答える
0

赤ちゃんを保管するためのフィールドを使用する必要があると思います。現在、そのためにローカルの Baby 配列を使用しています。私の知る限り、ListView は常に、渡された配列からデータを取得します (配列を無効にすると、ListView はそのデータを再度検索します。

要約すると、配列をフィールドとして保存します。データが変更された場合は、配列を更新し、アダプターで notifyDatasetChanged() を呼び出します。これにより、ListView がデータをリロードします。

于 2013-02-25T07:16:43.090 に答える