2014-05-23 2 views
8

"목록을 비우면"새로 고침을 추가했습니다. 목록이 비어 있으면 빈보기를 추가하려고합니다. 이제이 오류가 발생합니다. 이 작품을 어떻게 만들 수 있습니까? 메신저가 swipeRefresh 외부에 뷰를 위치시킨 다음 emptyView로 추가하면 작동합니다. 그래서 어떻게 외부 XML 파일로 할 수 있습니까?SwipeRefreshLayout은 하나의 직접 자식 만 호스팅 할 수 있습니다.

XML 코드 :

 <android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/swipeRefreshLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" > 


     <ListView 
      android:id="@android:id/list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:clipToPadding="false" 
      android:paddingBottom="@dimen/inbox_vertical_margin" ></ListView> 


</android.support.v4.widget.SwipeRefreshLayout> 

onCreateView :

View rootView = inflater.inflate(R.layout.fragment_inbox, container, 
     false); 

View empty = inflater.inflate(R.layout.empty_message_list, container, 
     false); 
ListView mListView = (ListView) rootView 
     .findViewById(android.R.id.list); 
((ViewGroup) mListView.getParent()).addView(empty); 
TextView textViewToChange = (TextView) empty 
     .findViewById(R.id.welcomeMessage); 

textViewToChange.setText("YO " 
     + ParseUser.getCurrentUser().getString(
       ParseConstants.KEY_PRESENTING_USERNAME) 
     + "! bad news.. :("); 
mListView.setEmptyView(empty); 

mSwipeRefreshLayout = (SwipeRefreshLayout) rootView 
     .findViewById(R.id.swipeRefreshLayout); 
mSwipeRefreshLayout.setOnRefreshListener(mOnRefreshListener); 
mSwipeRefreshLayout.setColorScheme(R.color.swipeRefresh1, 
     R.color.swipeRefresh2, R.color.swipeRefresh3, 
     R.color.swipeRefresh4); 

return rootView; 
+0

나는 똑같은 문제에 직면 해 있었고, 하나의 자식 인 listview를 하나만 사용하고 있지만 괜찮 았지만 가시성을 숨기고있을 수도 있다는 것을 알았습니다. 그게 내 끝에서 실수를 저지른 것입니다. –

답변

14

SwipeRefreshLayout는 XML 파일의 부모가 될 것이다.

FrameLayoutSwipeRefreshLayout의 하위로 사용할 수 있습니다. ListViewTextView (또는 다른 빈 상태보기)은 FrameLayout의 하위보기가 될 수 있습니다.

+0

훌륭한 답변입니다. .. – chhameed

+0

대답으로 받아 들여야합니다 – chhameed

+0

마술처럼 잘 작동합니다. 고맙습니다. – Irfan

0

내 앱에서 동일한 '끌어 오기 새로 고침'기능을 구현해야했습니다. '빈보기'를 구현하는 또 다른 (그리고 아주 간단한) 방법은 ListView의 머리글 또는 바닥 글보기를 사용하는 것입니다.

먼저 빈 뷰 레이아웃이 포함 된 "empty_view.xml"을 만듭니다. 그런 다음 호스팅 활동에서 onCreate() 메소드 내에서 같은 것을 할 : 위의 코드 myListView에서

View headerView = LayoutInflater.from(this).inflate(R.layout.empty_view, myListView, false); 
myListView.addHeaderView(headerView); 
myListView.setAdapter(adapter); 

// populate your ListView here 
// ...... 

// now check the number of items and remove the empty view if needed 
if (number_of_items > 1) { 
    myListView.removeHeaderView(headerView); 
} 
adapter.notifyDataSetChanged(); 

을 ListView에 객체와 어댑터는 어댑터입니다.

다른 상황에서도 유용합니다. 예를 들어, 목록 데이터가 웹 서비스에서 읽혀로드가 느린 경우 ProgressBar를 뷰에 넣고 ListView의 헤더보기로 설정하여 사용자에게 시각적으로 표시되도록합니다.