2013-07-06 1 views
0

기본적으로 데이터베이스 정보를 멋지게 표시하는 앱이 함께 제공됩니다.내 ListView가 소스의 새 요소를 표시하지 않는 이유는 무엇입니까?

주요 활동 : 탐색 서랍

public class MainActivity extends FragmentActivity { 
    public static List<Entry> entryTitles; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     MySQLiteHelper db = new MySQLiteHelper(this); 
     entryTitles= db.getEntryTitles(); 
     ..... 
    } 
    .... 
} 

조각은

public class PositionsFrag extends Fragment { 
    public static EntryListAdaptor entryAdapter; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     int i = getArguments().getInt(ARG_ENTRY_NUMBER); 
     switch(i){ 
      case 0: 
       entryAdapter = new EntryListAdapter(getActivity(), MainActivity.entryTitles); 
       lv.setAdapter(entryAdapter); 
       break; 
      ..... 
     } 
    } 
} 

그리고 마지막으로, 작업 표시 줄의 버튼 중 하나를 클릭하면 사용자가 새로운 필드를 추가 할 수 있도록 새로운 활동을 엽니 다 기입. 새로운 액티비티 막대 (NewActivity.java라고도 함)의 'done'작업 표시 줄 버튼은 이론적으로 새로운 Entry 객체를 만들고이 새 객체를 Entries 데이터베이스에 추가하고 각 항목의 첫 번째 요소를 문자열로 저장해야합니다. 새 목록을 만들고 목록이 업데이트되었음을 ​​entryAdapter에 알립니다.

public class NewActivity extends Activity { 
    db = new MySQLiteHelper(this); 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch(item.getItemId()) { 
      case R.id.action_done: 
       db.newEntry(new Entry(title, date, location)); 
       MainActivity.entryTitles= db.getEntryTitles(); 
       PositionsFrag.entriesAdapter.notifyDataSetChanged(); 
       Toast.makeText(getApplicationContext(), db.printFirstTitle(), Toast.LENGTH_SHORT).show(); 
       finish(); 
      .... 
      } 
     } 
    } 

나는이 토스트가 제대로 첫 번째 항목의 제목 필드를 표시합니다 실행

는하지만 PositionFragment에서 ListView에 결코 (데이터베이스가 적어도 새 항목을 받고 내가 성공적으로 SQLite는 기능을 읽을 작성하지 않았는지 것을 보여주는) 변경.

이 기능을 작동시키는 방법이나 더 나은 구조에 대한 제안은 크게 감사하겠습니다.

건배!

답변

0

다른 활동 (PositionsFrag.entriesAdapter.notifyDataSetChanged();)이 소유하고있는 UI 요소를 새로 고쳐야하는 것처럼 보입니다. NewActivitystartActivityForResult()과 함께 시작하고 추가 결과가 onActivityResult()이 될 때까지 기다릴 수 있습니다. 여기서 안전하게 entriesAdapter.notifyDataSetChanged()이라고 부를 수 있습니다.

+0

응답 해 주셔서 감사합니다. 이 코드를 사용하려고했지만 코드가 너무 잘못 작성되었을 수 있습니다. NewActivity는 MainActivity의 onOptionsItemSelected() 함수에서 호출되므로 onActivityResult가 MainActivity에 있어야합니다. 맞습니까? – jimmygoska

+0

예, 다른 단편/활동의 UI 요소를 수정하여 하나의 단편/활동을 만들 수 없으므로 그 요소가 안정적으로 작동 할 것으로 기대할 수 있습니다. – Kai

+0

내 코드를 돌아볼 시간이 없지만 적어도 내가 잘못 될 곳을 알고 있습니다. 감사! 15 명의 담당자가 아니기 때문에 대답을 유용하다고 표시 할 수는 없습니다. – jimmygoska