2014-01-10 2 views
0

Я использую Johan Nilssons PullToRefresh library, но код для обновления списка не выполняется.Android: PullToRefresh в ListFragment не обновляет список

Мой код:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    // Set a listener to be invoked when the list should be refreshed. 
    listView = new PullToRefreshListView(getActivity()); 
    listView.setOnRefreshListener(new OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      //check if internet connection is available 
      ConnectivityManager conMgr = (ConnectivityManager) getActivity(). 
       getSystemService(Context.CONNECTIVITY_SERVICE); 
      if (conMgr.getActiveNetworkInfo() == null) { 
       Log.d("debug","Keine Internetverbindung, kein Refresh möglich"); 
       Toast toast = Toast.makeText(getActivity(), 
         "Keine Internetverbindung! Refresh nicht möglich!", 
         Toast.LENGTH_LONG); 
       toast.show(); 
      }else{ 
       //refresh list 
       Log.d("debug","Internetverbindung verfügbar, refreshe Liste"); 

       DOMParser tmpDOMParser = new DOMParser(); 
       feed = tmpDOMParser.parseXml("http://www.test.de/feed"); 

       Log.d("debug", "Refresh Liste mit Feed: "+feed); 

       adapter.setNewFeed(feed); 
       WriteFeed(feed); 
       adapter.notifyDataSetChanged(); 
       // Call onRefreshComplete when the list has been refreshed. 
       listView.onRefreshComplete(); 
      } 
     } 
    }); 

    //inflate the fragment with the custom detail fragment 
    View view = inflater.inflate(R.layout.feed_list, null); 
    return view; 
} 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    //new PullToRefresh ListView 
    listView = new PullToRefreshListView(getActivity()); 
    listView.setVerticalFadingEdgeEnabled(true); 

    // Set custom list adapter to the ListView   
    adapter = new CustomListAdapter(getActivity(), feed); 
    listView.setAdapter(adapter); 

} 

Мой feed_list.xml

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

<mypackage.com.PullToRefreshListView 
android:id="@+id/android:list" 
android:layout_height="match_parent" 
android:layout_width="match_parent" 
    /> 

</LinearLayout> 

В LogCat последний шаг: Тэг: PullToRefreshListView Текст: onRefresh

В моей ListView текст «Загрузка »и показан вращающийся символ. Почему код в onRefresh() не выполнен?

РЕШЕНИЕ:

В моей ListFragment я изменил код:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     //inflate the fragment with the custom detail fragment 
     View view = inflater.inflate(R.layout.feed_list, null);  
     return view; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     // Set a listener to be invoked when the list should be refreshed. 
     listView = (PullToRefreshListView) getListView(); 

     listView.setOnRefreshListener(new OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       //do refresh stuff here    
     }); 

     listView.setVerticalFadingEdgeEnabled(true); 

     // Set custom list adapter to the ListView   
     adapter = new CustomListAdapter(getActivity(), feed); 
     listView.setAdapter(adapter); 

    } 

Мой feed_list.xml выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

<mypackage.com.PullToRefreshListView 
android:id="@id/android:list" 
android:layout_height="match_parent" 
android:layout_width="match_parent" /> 

</LinearLayout> 
+0

Вы можете разместить код XML для 'R.layout.feed_list'? –

+0

Вы создаете 'ListView' динамически, но не добавляете его в' Layout' в любом месте. 'onCreateView' имеет только этот много кода? –

+0

Я добавил информацию о запросе на исходное сообщение –

ответ

1

Я думаю, что вы создаете новый PullToRefreshListView вместо PullToRefreshListView в файле xml.

Попробуйте этот код

</LinearLayout> 


<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

<mypackage.com.PullToRefreshListView 
android:id="@+id/list" 
android:layout_height="match_parent" 
android:layout_width="match_parent" 
    /> 

</LinearLayout> 

и

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

//inflate the fragment with the custom detail fragment 
     View view = inflater.inflate(R.layout.feed_list, null); 
     // Set a listener to be invoked when the list should be refreshed. 
     listView = (PullToRefreshListView) view.findViewById(R.id.list); 
     listView.setOnRefreshListener(new OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       //check if internet connection is available 
       ConnectivityManager conMgr = (ConnectivityManager) getActivity(). 
        getSystemService(Context.CONNECTIVITY_SERVICE); 
       if (conMgr.getActiveNetworkInfo() == null) { 
        Log.d("debug","Keine Internetverbindung, kein Refresh möglich"); 
        Toast toast = Toast.makeText(getActivity(), 
          "Keine Internetverbindung! Refresh nicht möglich!", 
          Toast.LENGTH_LONG); 
        toast.show(); 
       }else{ 
        //refresh list 
        Log.d("debug","Internetverbindung verfügbar, refreshe Liste"); 

        DOMParser tmpDOMParser = new DOMParser(); 
        feed = tmpDOMParser.parseXml("http://www.test.de/feed"); 

        Log.d("debug", "Refresh Liste mit Feed: "+feed); 

        adapter.setNewFeed(feed); 
        WriteFeed(feed); 
        adapter.notifyDataSetChanged(); 
        // Call onRefreshComplete when the list has been refreshed. 
        listView.onRefreshComplete(); 
       } 
      } 
     }); 


     return view; 
    } 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 


     listView.setVerticalFadingEdgeEnabled(true); 

     // Set custom list adapter to the ListView   
     adapter = new CustomListAdapter(getActivity(), feed); 
     listView.setAdapter(adapter); 

    } 
+0

Я реализовал его так, но я получаю сообщение об ошибке '01-10 20: 22: 56.169: E/AndroidRuntime (9356): Caused by: java.lang.IllegalStateException: просмотр содержимого еще не создан'' в строке кода' listView = (PullToRefreshListView) getListView(); ' –

+1

Проверьте измененный ответ. Измените« xml », а также –

+0

. Спасибо, с обновленным кодом. Я получаю эту ошибку:' 01-11 06: 26: 43.260: E/AndroidRuntime (925) : Caused by: java.lang.RuntimeException: ваш контент должен иметь ListView, атрибут id которого является «android.R.id.list» в строке 'super.onViewCreated (view, savedInstanceState);' –

Смежные вопросы