2016-02-10 4 views
1

Я нашел много статей о внедрении Android SwipeRefreshLayout this being the one I followed, и все они говорят, что это очень просто, однако я не могу заставить работать. Что я делаю не так?Почему мой Android SwipeRefreshLayout не освежает?

package myPackage; 

public class MyClass extends Fragment { 

    private View rootView; 
    private DatabaseHelper myDBHelper; 
    private Cursor dataCursor; 
    private SimpleCursorAdapter mySimpleCursorAdapter; 

    private ListView rowOfDataListView; 
    private SwipeRefreshLayout mySwipeRefreshLayout; 

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

     rootView = inflater.inflate(R.layout.my_awesome_layout, container, false); 
     rowOfDataListView = (ListView) rootView.findViewById(R.id.row_of_data); 
     mySwipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipe_refresh_container); 

     return rootView; 
    } 

    @Override 
    public void onViewCreated(View rootView, Bundle savedInstanceState){ 
     super.onViewCreated(rootView, savedInstanceState); 

     if(getArguments() != null) { 
      idNumber = getArguments().getString("id"); 
     } 

     myDBHelper = new DatabaseHelper(getActivity()); 

     dataCursor = myDBHelper.getDataCursor(idNumber); 

     String[] fromColumns = {"column1", "column2", "column3", "column4", "column5", "column6"}; 
     int[] toViews = {R.id.column1_textview, R.id.column2_textview, R.id.column3_textview, R.id.column4_textview, R.id.column5_textview, R.id.column6_textview}; 

     mySimpleCursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.row_of_data_layout, dataCursor, fromColumns, toViews, 0); 

     rowOfDataListView.setAdapter(mySimpleCursorAdapter); 

     myDBHelper.close(); 

     mySwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       mySwipeRefreshLayout.setRefreshing(false); 
      } 
     }); 
    } 
} 

Мои данные первоначально отображаются правильно, но обновление не обновляется.

ответ

1

Я не вижу, где вы обновляете данные onRefresh. Я думаю, вам следует отделить код, который создает View в новый метод, вызывать его в вашем методе onViewCreated и затем снова вызвать его в onRefresh. В противном случае onRefresh запускается, но он ничего не делает «DO».

package myPackage; 

public class MyClass extends Fragment { 

    private View rootView; 
    private DatabaseHelper myDBHelper; 
    private Cursor dataCursor; 
    private SimpleCursorAdapter mySimpleCursorAdapter; 

    private ListView rowOfDataListView; 
    private SwipeRefreshLayout mySwipeRefreshLayout; 

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

     rootView = inflater.inflate(R.layout.my_awesome_layout, container, false); 
     rowOfDataListView = (ListView) rootView.findViewById(R.id.row_of_data); 
     mySwipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipe_refresh_container); 

     return rootView; 
    } 

    @Override 
    public void onViewCreated(View rootView, Bundle savedInstanceState){ 
     super.onViewCreated(rootView, savedInstanceState); 
     methodToBuildTheData(); 

     mySwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       mySwipeRefreshLayout.setRefreshing(false); 
       methodToBuildTheData(); 
      } 
     }); 
    } 

    private void methodToBuildTheData() { 
     if(getArguments() != null) { 
      idNumber = getArguments().getString("id"); 
     } 

     myDBHelper = new DatabaseHelper(getActivity()); 

     dataCursor = myDBHelper.getDataCursor(idNumber); 

     String[] fromColumns = {"column1", "column2", "column3", "column4", "column5", "column6"}; 
     int[] toViews = {R.id.column1_textview, R.id.column2_textview, R.id.column3_textview, R.id.column4_textview, R.id.column5_textview, R.id.column6_textview}; 

     mySimpleCursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.row_of_data_layout, dataCursor, fromColumns, toViews, 0); 

     rowOfDataListView.setAdapter(mySimpleCursorAdapter); 

     myDBHelper.close(); 
    } 

} 
+0

Ну, это просто сработало отлично! Спасибо. Я тоже был смущен обновлением данных об обновлении. Я не видел ничего подобного в примерах, или я полностью пропустил это. Еще раз спасибо за предложение взломать код сборки в новый метод. – Brian

+0

@Brian, проблем нет. Я знаю, что слишком долго боролся с SwipeRefreshLayout. Удивительно, как это работает. Рад, что это сработало для вас – Phil

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