2014-11-25 2 views
1

두 가지 다른 활동이 있습니다. 하지만 두 번째 활동으로 가서 뒤로 누르면 ListView가 표시되지 않습니다. 나는 그 문제가 무엇인지 찾아 낼 수 없다.두 번째로 어댑터를 설정하면 ListView가 표시되지 않습니다.

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    currentLayout = R.layout.activity_main; 
    db = new TodoDbHelper(this); 
    todos = db.getAllTodos(); 
    nrOfTodos = todos.size(); 

    //For ListView 
    mListView = (ListView) findViewById(R.id.gradientBackground); 
    mAdapter = new TodoAdapter<String>(this, R.layout.text_view_item_default); 
    mListView.setAdapter(mAdapter); 

    //Calculate height of screen 
    Display display = getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    int width = size.x; 
    int height = size.y; 
    listItemSize = height/10; 
    SCREEN_WIDTH = width;   

    createTodoItems(); 

} 

public void createTodoItems() { 
    refresh(); 
    mAdapter.clear(); 
    for(int i = 0; i < nrOfTodos; i++) { 
     String title = todos.get(i).getTitle(); 

     mAdapter.add(title); 
     //System.out.println(title); 
     //System.out.println(mAdapter); 

    } 
    mListView.setAdapter(mAdapter);   
    ImageButton b = (ImageButton) findViewById(R.id.addButton); 
    b.bringToFront(); 
} 

public void refresh() { 
    todos = db.getAllTodos(); 
    nrOfTodos = todos.size(); 
} 

@Override 
public void onBackPressed() { 
    System.out.println("" + this.findViewById(android.R.id.content).getRootView()); 
    System.out.println("" + currentLayout); 
    if(R.layout.activity_add_todo == currentLayout) { 
     setContentView(R.layout.activity_main); 
     currentLayout = R.layout.activity_main; 

     createTodoItems(); 
     Log.d("onBackPressed", "We're going back."); 
    } 

} 

동일한 "createTodoItems()"를 두 번 수행하지만 두 번째로는 상관 없습니다.

또한 mAdapter는 두 번째 createTodoItems() 이후와 같습니다. mAdapter의 값은 여전히 ​​동일합니다.

새 항목을 추가 할 때와 같은 문제가 발생합니다. 그냥 ListView에서 아무것도 렌더링 못해.

+0

이 이전으로 돌아갑니다 뒤로 버튼을 2 개 활동을하고 눌러 올바른 방법이 아니다 ... 당신을 의도를 사용해야합니다. –

+0

왜냐하면 onBackPressed()는 onCreate()처럼 다시 contentView를 설정하고 mListView 및 mAdapter를 다시 설정하지 않고 createTodoItems()를 수행하기 때문입니다. - 활동을 마치지 않도록 onBackPressed()를 재정의한다고 가정합니다. – Wildroid

+0

맞습니다. 이제는 내가 무엇을하고 있는지도 모릅니다. – Clanket

답변

1

시도는 도움이 될 수 있습니다) (notifyDataSetChanged이 기능을 추가합니다 :

public void createTodoItems() { 
    refresh(); 
    mAdapter.clear(); 
    for(int i = 0; i < nrOfTodos; i++) { 
     title = todos.get(i).getTitle(); 

     mAdapter.add(title); 
     //System.out.println(title); 
     //System.out.println(mAdapter); 

    } 
    mListView.setAdapter(mAdapter); 
    mAdapter.notifyDataSetChanged(); 
    ImageButton b = (ImageButton) findViewById(R.id.addButton); 
    b.bringToFront(); 
} 
+0

작동하지 않았습니다. :( – Clanket

관련 문제