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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <? xml version = "1.0" encoding = "utf-8" ?> 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).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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. :)