Ich habe eine erweiterbare Listview, die ich auch hinzufügen kann. Wie kann ich jeden hinzugefügten Artikel speichern? Ich habe versucht, Sharedpreferences mit Gson zu Json zu verwenden, aber das scheint nicht zu funktionieren. Hier ist meine erweiterbar Listenansicht Adapter:So speichern Sie eine erweiterbare Listenansicht in Android?
public class ExpandListAdapter extends BaseExpandableListAdapter {
private Context context;
private ArrayList<Group> groups;
public ExpandListAdapter(Context context, ArrayList<Group> groups) {
this.context = context;
this.groups = groups;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
ArrayList<Child> chList = groups.get(groupPosition).getItems();
return chList.get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
Child child = (Child) getChild(groupPosition,
childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) context
.getSystemService(context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.child_row, null);
}
TextView tv = (TextView) convertView.findViewById(R.id.country_name);
tv.setText(child.getName().toString());
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
ArrayList<Child> chList = groups.get(groupPosition)
.getItems();
return chList.size();
}
@Override
public Object getGroup(int groupPosition) {
return groups.get(groupPosition);
}
@Override
public int getGroupCount() {
return groups.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
Group group = (Group) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater inf = (LayoutInflater) context
.getSystemService(context.LAYOUT_INFLATER_SERVICE);
convertView = inf.inflate(R.layout.group_header, null);
}
TextView tv = (TextView) convertView.findViewById(R.id.group_name);
tv.setText(group.getName());
return convertView;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
Hier ist die Klasse, die erweiterbar Listenansicht verwendet, I-Gruppen mit dem Alertdialog hinzufügen und es fügt auch ein Kind mit dem Namen „Yo“, nur zu Testzwecken:
public class classesScreen extends Activity implements AdapterView.OnItemSelectedListener {
private ExpandListAdapter ExpAdapter;
private ExpandableListView ExpandList;
private Button newHeaderBut;
static ArrayList<Group> group_list;
ArrayList<Child> child_list;
String m_text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_classes);
group_list = new ArrayList<Group>();
ExpandList = (ExpandableListView) findViewById(R.id.classesListView);
ExpAdapter = new ExpandListAdapter(this, group_list);
ExpandList.setAdapter(ExpAdapter);
newHeaderBut = (Button) findViewById(R.id.newClassBut);
newHeaderBut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(classesScreen.this);
builder.setTitle("Add a New Class:");
final EditText input = new EditText(classesScreen.this);
builder.setView(input);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
m_text = input.getText().toString();
Group gru1 = new Group();
gru1.setName(m_text);
child_list = new ArrayList<Child>();
Child ch1 = new Child();
ch1.setName("Yo");
child_list.add(ch1);
gru1.setItems(child_list);
group_list.add(gru1);
ExpAdapter.notifyDataSetChanged();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
});
}
public void onItemSelected(AdapterView<?> parent, View view, int position, long id){}
public void onNothingSelected(AdapterView<?> arg0) {}
}
Ich habe auch zwei Objektklassen namens Group und Child. Ich kann diese zeigen, wenn Sie sie brauchen. Danke im Voraus!
implementieren "So sparen Sie eine erweiterbare Listview in Android?" - Du nicht. Sie speichern die Modelldaten, die zum Auffüllen der 'ExpandableListView' verwendet werden. In diesem Fall werden die Objekte "Group" und "Child" gespeichert. "Ich habe versucht, geteilte Präferenzen mit Gson zu Json zu verwenden, aber das scheint nicht zu funktionieren" - wir können Ihnen nicht mit Code helfen, den wir nicht sehen können. SharedPreferences scheint eine seltsame Wahl zu sein. Sie können die Daten auch in einer einfachen JSON-Datei speichern (z. B. in 'getFilesDir()'). – CommonsWare
Können Sie angeben, warum Sie es nicht mit gson und sharedpreferences speichern konnten? – ravindu1024
@CommonsWare Wie würde ich die Gruppen- und Child-Objekte speichern und sie dann wieder abrufen und die erweiterbare Liste erneut füllen? –