5

를 가져 오는 후 ArrayAdapter와 함께 ListView를 재설정 방법 :나는이 같은 ListView를 채울하는 ListAdapter를 사용하고 데이터

static final String[] PROBLEMS = new String[] {"one", "two", "three" }; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState);   

    setListAdapter(new ArrayAdapter<String>(this, R.layout.my_problems, PROBLEMS)); 

    ListView lv = getListView(); 
    lv.setTextFilterEnabled(true); 

그 후 나는 더 많은 데이터를 얻을 수 내 서버에 원격 호출을 만드는 중이을 그 목록에 AsyncTask 호출이 있고, 서버에서 데이터를 다시 가져올 때 ListView를 채우고 재설정하는 방법을 알지 못합니다.

@Override 
    protected void onPostExecute(String result) 
    {  
      // Unwrap the stuff from the JSON string     
      String problem_title = null; 
      String problem_id = null; 

      try 
      { 
       JSONArray obj = new JSONArray(result); 
       JSONObject o = obj.getJSONObject(0);      

       Log.d("Title: " , "" + o.getString("problem_title"));  
       Log.d("id: " , "" + o.getString("problem_id"));  

       problem_title = o.getString("problem_title"); 
       problem_id = o.getString("problem_id"); 
      } 
      catch (Exception e) 
      { 
      } 

      // Now not sure what to do :) 
      // How do I reset the list that I had set up above? 
       } 

내가 목록을 재설정 적절하게 구조화 된 데이터로 결과를 확인하지만 그 수행 방법을 잘 수 없습니다 : 지금까지 나는 이런 식으로 뭔가가있다. 누군가 제발 도와 줄 수 있니? :) 내가 이런 식으로 사용

답변

16

,

//change values array with your new data then update the adapter 
    adapter.notifyDataSetChanged(); 

다음

values = new ArrayList<String>(); 
    //put anything you want in values as start 
    adapter = new ArrayAdapter<String>(this,R.layout.notification, values); 
    setListAdapter(adapter); 

가 다음 목록보기의 내용이이 기능

+0

내가 지금 시도해 보도록하겠습니다 ... 어떻게되었는지 알려 드리겠습니다. – GeekedOut

+0

아, 컴파일 중입니다! 감사! – GeekedOut

+0

문제 없습니다, 행운을 빕니다 –

3
adapter.notifyDataSetChanged(); 

을 실행시 변경됩니다 것은 좋은 방법입니다 그러기 위해서는 때때로 우리가 필요로하는대로 일하지 않을 것입니다. 이 경우 다시 setadapter를 수행하면 listview가 새로 고쳐집니다. 하지만 이것은 전체 목록보기를 다시 생성하기 때문에 이렇게하는 것이 좋지 않습니다. 이렇게하면 성능이 저하 될 수 있습니다. 그리고 앱이 느려집니다.

7

데이터 세트를 변경하려는 경우 어댑터를 다시 초기화 할 필요가 없습니다. 다음 코드를 시도해보십시오. -

필요하다면 필요하지는 않지만 나중에 어댑터에 변경 사항을 알릴 수도 있습니다.

adapter.notifyDataSetChanged(); 

API 레벨 11 이상을 타겟팅하는 경우 어댑터에서 addAll() 메소드를 사용할 수 있습니다. 그것이 더 효율적이기 때문에.

관련 문제