Android developers Page:
http://developer.android.com/intl/ja/reference/android/app/ListFragment.html
You need to create following files.
- Create Layout xml file, if need to use custom Screen Layout with ListView and more widget
- Row Layout xml file
- ListAdapter Class to make list data
Screen Layout
ListFragment has default ListView. this is mean that you do not should set view.But, When ListView is no data, Application will display a screen similar to the following.
"Loading" continues to display.
Therefore, you should set custom layout.
Custom layout has ListView object with the id "@android:id/list"
and should has "empty list" with id "android:empty".
Example Layout:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="8dp" android:paddingRight="8dp"> <ListView android:id="@id/android:list" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00FF00" android:layout_weight="1" android:drawSelectorOnTop="false"/> <TextView android:id="@id/android:empty" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FF0000" android:text="No data"/> </LinearLayout>
You can customize the fragment layout by returning your own view hierarchy from onCreateView(LayoutInflater, ViewGroup, Bundle).
public class AppListFragment extends ListFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { // We have different layouts, and in one of them this // fragment's containing frame doesn't exist. The fragment // may still be created from its saved state, but there is // no reason to try to create its view hierarchy because it // won't be displayed. Note this is not needed -- we could // just run the code below, where we would create and return // the view hierarchy; it would just never be used. return null; } return inflater.inflate(R.layout.list,null); } }
This comment has been removed by the author.
ReplyDeleteIf you are using the Compatibility Library and follow the article's directions, you will get an IllegalStateException -- especially if you try to call setEmptyText() from within your Fragment.
ReplyDeleteThis is actually a known issue, documented here:
http://code.google.com/p/android/issues/detail?id=21742
Luckily, toward the end of the comments there are some ways listed on how to get around the problem.
Maybe this will save someone else a couple hours of hair pulling. :)