2012-09-06 59 views
0

我在显示片段内的ListView时遇到问题。我在我的片段中使用ListFragment。我无法弄清楚我的实际问题在哪里。片段内的ListView给出错误

CategoriesFragment.java

public class CategoriesFragment extends ListFragment { 
ListView lv; 
TextView tv;  
    public CategoriesFragment() { 
    }  

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) {   
    if(container==null) 
     return null; 
    inflater.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View view = inflater.inflate(R.layout.categories_fragment,container,false); 
    View listView = (ListView)view.findViewById(R.id.listview1); 
    return view;   
    }  

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) {  
    super.onActivityCreated(savedInstanceState); 
    final String[] fruits = new String[] { "Apple", "Avocado", "Banana", 
     "Blueberry", "Coconut", "Durian", "Guava", "Kiwifruit"};    
    setListAdapter(new ArrayAdapter<String> 
     (getActivity(),R.layout.categories_fragment,fruits));  
    } 
} 

PagerAdaper.java

public class SectionsPagerAdapter extends FragmentPagerAdapter { 
    public SectionsPagerAdapter(FragmentManager fm) { 
    super(fm); 
    } 

    @Override 
    public Fragment getItem(int i) { 
    switch(i) { 
    case 0: 
     Fragment fragment = new CategoriesFragment(); 
     return fragment; 
     break; 
    case 1: 
     Fragment fragment = new FeaturedFragment(); 
     return fragment; 
     break 
    } 
    return null; 
    } 

    @Override 
    public int getCount() { 
    return 2; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
    switch (position) { 
     case 0: return "CATEGORIES"; 
     case 1: return "FEATURED"; 
    } 
    return null; 
    } 
} 

categories_fragment.xml

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

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/listview1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

DDMS错误文本:

09-06 12:37:47.402: E/AndroidRuntime(2611): FATAL EXCEPTION: main 
09-06 12:37:47.402: E/AndroidRuntime(2611): java.lang.RuntimeException: Your content  must have a ListView whose id attribute is 'android.R.id.list' 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.support.v4.app.ListFragment.ensureList(ListFragment.java:344) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.support.v4.app.ListFragment.onViewCreated(ListFragment.java:145) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:885) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:635) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.support.v4.view.ViewPager.populate(ViewPager.java:895) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.support.v4.view.ViewPager.populate(ViewPager.java:772) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1234) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.view.View.measure(View.java:12723) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1017) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:555) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.view.View.measure(View.java:12723) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.view.View.measure(View.java:12723) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:812) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.view.View.measure(View.java:12723) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
09-06 12:37:47.402: E/AndroidRuntime(2611):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
+0

在您的logcat错误中提到'您的内容必须有一个ListView,其id属性是'android.R.id.list'',这意味着你的listview应该是'android:id =“@android:id/list”' ' – Akshay

+0

是的。该问题已解决。谢谢。获得另一个错误。在提问前试图解决自己。 – intrepidkarthi

回答

4

更改此

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/listview1" 
android:layout_width="match_parent" 
android:layout_height="match_parent"/> 

到,

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/list" 
android:layout_width="match_parent" 
android:layout_height="match_parent"/> 

的问题是与该ID。当你扩展ListFragment您的ListView必须有这样的事情ID,@android:id/list

+0

谢谢@Selva。它在这一行中给出CategoriesFragment.java错误,'code'查看listView =(ListView)view.findViewById(R.id.listview1);我无法取得列表视图的ID现在 – intrepidkarthi

+0

我已将其更改为android.R.id.list。该问题已解决。但还有其他一些问题。我正在做。 – intrepidkarthi

+0

现在得到这个错误。 “arrayadapter要求资源ID是一个文本视图”。这是否意味着我们无法在适配器中传递listview结果ID? – intrepidkarthi

3

代替android:id="@+id/listview1"使用android:id="android:id/list"

因为,ListFragment has a default layout that consists of a single list view. However, if you desire, you can customize the fragment layout by returning your own view hierarchy from onCreateView(LayoutInflater, ViewGroup, Bundle). To do this, your view hierarchy must contain a ListView object with the id "@android:id/list" (or list if it's in code)

+0

提供:http://developer.android.com/reference/android/app/ListFragment.html – Shrikant

1

你已经子类ListFragment这已经举办了ListView对象。您的视图层次结构必须包含一个ListView对象,其编号为@android:id/list,而不是@+id/listview1