私は理解しているように、 1つのエントリに4つのデータを含み、最初のものだけを表示するリストを表示するとします。
この場合、カスタムModel
を作成すると簡単になります。これは、1つのオブジェクトであなた件のデータを格納します:
ProfileModel
|
|-- varA
|-- varB
|-- varC
'-- varD
あなたのカスタムモデルは次のようなもののようになります。
public class ProfileModel {
private String varA;
private float varB;
private int varC;
private String varD;
// getters
...
// setters
...
public ProfileModel() { }
}
を開始時にプロファイルのリストを初期化します。
ArrayList<ProfileModel> list = new ArrayList<>();
移入するにはメインリストは次のようになります。
// create a list of object to the datas
ProfileModel profile = new ProfileModel();
profile.setVarA(varA);
profile.setVarB(varB);
profile.setVarC(varC);
profile.setVarD(varD);
// then fill the first list
list.add(profile);
String
以外のデータでアダプターを塗りたいので、カスタムモデルを使用することをお勧めします。 1つを作成するのは難しいことではないし、場合によってはアップデートで異なる動作が必要な場合があるため、カスタムのnotifyDataSetChanged
メソッドを使用することをお勧めします。
:
ProfileAdapter profileAdapter = new ProfileAdapter(this, list);
profileList.setAdapter(profileAdapter);
は、このアダプタを更新するには次のようにアダプターを設定することができ、その後
public class ProfileAdapter extends BaseAdapter {
private Context context;
private ArrayList<ProfileModel> listProfiles;
public ProfileAdapter(Context context, ArrayList<ProfileModel> listProfiles) {
super();
this.context = context;
this.listProfiles = listProfiles;
}
private class ViewHolder {
private TextView textVarA;
}
@Override
public int getCount() {
return listProfiles != null ? listProfiles.size() : 0;
}
@Override
public Object getItem(int i) {
return listProfiles.get(i); // will return the profile model from position
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
ViewHolder holder;
if (view == null) {
holder = new ViewHolder();
view = LayoutInflater.from(context)
.inflate(android.R.layout.simple_list_item_1, null);
holder.textVarA = (TextView) view.findViewById(android.R.id.text1);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
ProfileModel profile = listProfiles.get(i);
holder.textVarA.setText(profile.getVarA()); // get varA value
return view;
}
public void addEntry(ProfileModel newEntry) {
listProfiles.add(newEntry);
this.notifyDataSetChanged();
}
}
:
だから、ここにあなたが使用したものと同じレイアウトを持つシンプルなアダプタです
// create a list of object to the datas
ProfileModel profile = new ProfileModel();
profile.setVarA(varA);
profile.setVarB(varB);
profile.setVarC(varC);
profile.setVarD(varD);
profileAdapter.addEntry(profile); // this will call notifyDataSetChanged
最後に、TinyDB
についてはあまり気にしませんが、データを保存するためにJSONファイルを使用していることがわかりました。したがって、データをJSONArrayに変換するメソッドを作成して、名前がvarA
で、値がvarB, varC, varD
になるようにすることができます。データをJSON形式に変換する方法の例がたくさんあります(Gsonを使用してモデルをJSON形式に変換する)。
これは役に立ちます。
詳しくは、どのような問題がありますか? –
まずは((ArrayAdapter)profileList.getAdapter())を使用しようとしています。notifyDataSetChanged();リストビューを更新するには、アプリケーションを再ビルドした後にのみリストビューが更新されます。リストビューを更新するにはどうすればよいですか? – Pie