내가 알고있는 것처럼, 하나의 항목에 4 개의 데이터가 들어있는 목록을 표시하고 첫 번째 항목 만 표시하려고합니다.
만약 그렇다면 사용자 정의 Model
을 만들면 더 쉬울 것입니다. 이것은 하나의 객체에 datas를 저장합니다 :
ArrayList<ProfileModel> list = new ArrayList<>();
채우려면 :
public class ProfileModel {
private String varA;
private float varB;
private int varC;
private String varD;
// getters
...
// setters
...
public ProfileModel() { }
}
시작 프로파일의 목록을 초기화 :
ProfileModel
|
|-- varA
|-- varB
|-- varC
'-- varD
귀하의 사용자 정의 모델이 같은처럼 보일 수 있습니다 주요 목록은 다음과 같습니다 :
// 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
이 아닌 다른 데이터로 어댑터를 채우기를 원하기 때문에 맞춤형 어댑터를 사용하는 것이 좋습니다. 하나를 생성하는 것이 그리 어렵지 않을 때도 있고 때로는 업데이트에서 다른 동작을 원할 수도 있기 때문에 사용자 정의 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 파일을 사용하고있는 것을 보았습니다. 따라서 데이터를 varA
이고 값이 varB, varC, varD
인 JSONArray로 변환하는 메소드를 작성할 수 있습니다. 데이터를 JSON으로 변환하는 방법에 대한 많은 예제가 있습니다 (Gson을 사용하여 모델을 JSON 형식으로 변환).
희망이 유용 할 것입니다.
더 자세히 설명해보십시오. 어떤 종류의 문제가 있습니까? –
우선 먼저 ((ArrayAdapter) profileList.getAdapter()를 사용하려고합니다.) notifyDataSetChanged(); 목록보기를 업데이트하지만 목록보기는 응용 프로그램을 다시 빌드 한 후에 만 업데이트됩니다. 내 목록보기를 새로 고칠 수 있습니까? – Pie