studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones java android android-activity hashmap expandablelistview

java - programacion - Agregar un elemento de otra actividad a ExpandableListView



manual de programacion android pdf (1)

Para su última edición puede intentar esto:

static void addListData(int TimeStamp, final String lat, final String lng, final String speed, final String direction, final Context context) { int todaystamp = startOf("today"); int yesterdaystamp = startOf("yesterday"); String Datetime = DateFormat.format("dd-MM-yyyy kk:mm:ss", new Date(TimeStamp * 1000L)).toString(); String location = "*headline=" + lat + ", " + lng + ";speed=" + speed + ";direction=" + direction + ";date=" + Datetime + ";"; SharedPreferences pref = context.getSharedPreferences("myPrefs", MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); if (TimeStamp >= todaystamp) { String today = pref.getString("Today",null); if (today != null) { StringBuilder str = new StringBuilder(today); str.insert(0, location + ", "); editor.putString("Today", str.toString()); } else { editor.putString("Today", location); } } else if (TimeStamp >= yesterdaystamp) { String yesterday = pref.getString("Yesterday",null); if (yesterday != null) { StringBuilder str = new StringBuilder(yesterday); str.insert(0, location + ", "); editor.putString("Yesterday", str.toString()); } else { editor.putString("Yesterday", location); } } else if (TimeStamp < yesterdaystamp) { String older = pref.getString("Older",null); if (older != null) { StringBuilder str = new StringBuilder(older); str.insert(0, location + ", "); editor.putString("Older", str.toString()); } else { editor.putString("Older", location); } } editor.commit(); }

Esto asegurará que no anule la clave sino que la agregue si existe. (Esto se hace comprobando si SharedPreferences no es nulo para una clave específica).

Yo uso StringBuilder con el método de insert en este caso.

Deseo agregar un elemento al niño Today desde otra actividad a ExpandableListView . La actividad donde quiero agregarlo se llama LocHistory , aquí hay un código para agregar algo a la lista:

static void addListData(final Context context) { List<NewsItem> list = listDataChild.get("Today"); NewsItem newsData = new NewsItem(); newsData = new NewsItem(); newsData.setHeadline("11.11111, 1.1111"); newsData.setSpeed("1.11KM/H"); newsData.setDirection("111"); newsData.setDate("11-1-1111 11:11:11"); list.add(0, newsData); listDataChild.put("Today", list); }

Esto funciona cuando llamo a la función en la misma clase ( LocHistory ). Pero cuando lo llamo MainActivity esta manera:

public class MainActivity extends Activity { Button button2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button2 = (Button) this.findViewById(R.id.button2); button2.setOnClickListener(new OnClickListener() { public void onClick(View v) { LocHistory.addListData(getBaseContext()); } }); } }

Entonces no hay nada agregado a la lista. ¿Es posible agregar un elemento de otra actividad a ExpandableListView ? Quiero que se agregue algo que la clase LocHistory no vaya a abrir, así que creo que startActivity con una intención no es una opción aquí (pero no estoy seguro).

(Las fuentes de Java se pueden encontrar aquí: MainActivity.java , LocHistory.java , NewsItem.java y ExpandableListAdapter.java )

Editar:

Como algunos chicos en otro foro señalaron, ahora estoy usando SharedPreferences . Estoy usando este código:

static void addListData (int TimeStamp, final String lat, final String lng, final String speed, final String direction, final Context context){ int todaystamp = startOf("today"); int yesterdaystamp = startOf("yesterday"); String Datetime = DateFormat.format("dd-MM-yyyy kk:mm:ss", new Date(TimeStamp * 1000L)).toString(); SharedPreferences pref = context.getSharedPreferences("myPrefs", MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); if (TimeStamp >= todaystamp) { editor.putString("Today", "*headline=" + lat + ", " + lng + ";speed=" + speed + ";direction=" + direction + ";date=" + Datetime + ";"); } else if (TimeStamp >= yesterdaystamp) { editor.putString("Yesterday", "*headline=" + lat + ", " + lng + ";speed=" + speed + ";direction=" + direction + ";date=" + Datetime + ";"); } else if (TimeStamp < yesterdaystamp) { editor.putString("Older", "*headline=" + lat + ", " + lng + ";speed=" + speed + ";direction=" + direction + ";date=" + Datetime + ";"); } editor.commit(); }

Pero ahora estoy atascado con un problema, cuando agrego un elemento a SharedPreferences en la misma clave, sobrescribirá los datos anteriores. ¿Cómo puedo agregar datos a la misma clave sin sobreescribir los datos anteriores? ¿Es posible obtener primero los datos y luego unirlos a los datos luego de agregar los datos a las SharedPreferences ?