2013-09-04 3 views
2

다른 활동의 자식 TodayExpandableListView에 항목을 추가하고 싶습니다. 나는 그것이 LocHistory 이름 추가 할 활동은 여기 목록에 무언가를 추가하는 코드입니다 :다른 활동의 항목을 ExpandableListView에 추가

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); 
} 

내가 같은 클래스 (LocHistory)에서 함수를 호출 할 때이 노력하고 있습니다. 나는이 같은 MainActivity에 전화 때 :

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()); 
      } 
     }); 
    } 
} 

을 다음 목록에 추가 아무것도 없다. 다른 활동의 항목을 ExpandableListView에 추가 할 수 있습니까? 나는 무언가가 있다면 클래스 LocHistory가 열리지 않을 것이라는 점을 알고 싶습니다. 의도적으로 여기에있는 startActivity이 옵션이 아니라고 생각합니다 (하지만 확실하지 않습니다).

는 (자바 소스는 여기에서 찾을 수 있습니다 : MainActivity.java, LocHistory.java, NewsItem.javaExpandableListAdapter.java)

편집하십시오 다른 포럼에 어떤 사람으로

지적, 나는 지금은 SharedPreferences을 사용 중입니다.

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(); 
} 

을하지만 그것은 이전 데이터를 덮어 쓰게됩니다 같은 키에 SharedPreferences에 항목을 추가 할 때 지금은 하나 개의 문제에 붙어 :이 코드를 사용하고 있습니다. 이전 데이터를 덮어 쓰지 않고 동일한 키에 데이터를 추가하려면 어떻게합니까? 처음에는 데이터를 가져온 다음 SharedPreferences에 데이터를 추가 한 후에 데이터에 항목을 추가 할 수 있습니까?

+0

'list' 또는'listDataChild'에 새 항목이 표시되지 않습니까? 또는 어댑터에서 새 항목이 보이지 않습니까? – Luksprog

+0

@Luksprog 'Today'라는 하위의 목록에는 표시되지 않습니다 (어댑터라고 생각합니까?). 하지만'Today' 아래 목록에 추가 된'addListData' 함수에서'listDataChild'를 로그하는 것 같습니다 (로깅은'LocHistory' 클래스를 처음 열었을 때만 작동합니다). – user1480019

+1

나는 아직도 당신이하려는 것을 얻지 못하고 어떻게 현재의 구현을 테스트 했는가? 'MainActivity' 또는'LocHistory' 클래스로부터 그 메소드를 호출하는 것은 아무런 문제없이 작동 할 것입니다. 성공적인 NewsItem이'Today' 키 밑의리스트에 추가됩니다. 해당 메소드가 끝날 때지도를 인쇄하면 새 항목이 표시됩니다. 'LocHistory' 액티비티가 실행될 때만 맵과리스트를 초기화한다는 것을 명심하십시오. – Luksprog

답변

2

당신이 마지막 편집을 위해 당신이 시도 할 수 있습니다 : 이것은 키를 무시하지만이있는 경우 추가하지 않도록합니다

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(); 
} 

. (이것은 SharedPreferences이 특정 키에 대해 널이 아닌지 점검하여 수행됩니다).

이 경우 insert 방법으로 StringBuilder을 사용합니다.

관련 문제