Android + ListFragment with a custom view hierarchy

24,626

Solution 1

I wasn't returning the new view within the onCreateView method of the ListFragment class. For instance:

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
            View view = inflater.inflate(R.layout.main, null);
            return view;
        }

All works well now in the land of Android!

Solution 2

I think you'd better

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle  savedInstanceState) {
 View root = inflater.inflate(R.layout.main, container, false);
 return root;
 }

Solution 3

optimized way and shot code

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.list_alphabet, container, false);
    }

Solution 4

getSupportFragmentManager().beginTransaction().add(android.R.id.content, list).commit();

List is not accepted, it's looking for a fragment.

Share:
24,626

Related videos on Youtube

worked
Author by

worked

Updated on March 07, 2020

Comments

  • worked
    worked about 4 years

    I'm attempting to customize the fragment layout by returning my own view hierarchy from onCreateView(LayoutInflater, ViewGroup, Bundle). This inflates my custom view, but seems to stack the views instead of inflating within, I see everything at once. Any help is appreciated.

    MyActivity.java:

    public class MyActivity extends FragmentActivity{
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) {
                ArrayListFragment list = new ArrayListFragment();
                getSupportFragmentManager().beginTransaction().add(android.R.id.content, list).commit();
            }
        }
    
        public static class ArrayListFragment extends ListFragment {
    
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                inflater.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
                inflater.inflate(R.layout.main, container);
                return super.onCreateView(inflater, container, savedInstanceState);
            }
    
            @Override
            public void onActivityCreated(Bundle savedInstanceState) {
                super.onActivityCreated(savedInstanceState);
                String List[] = {"Larry", "Moe", "Curly"}; 
                setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, List));
            }
        }
    }
    

    main.xml

    <?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">
    
      <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="THIS IS A BUTTON" />
    
      <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#00FF00"
        android:layout_weight="1"
        android:drawSelectorOnTop="false" />
    
      <TextView
        android:id="@android:id/empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000"
        android:text="No data" />
    </LinearLayout>
    
  • ashughes
    ashughes about 12 years
    The fist line in your onCreateView isn't necessary (it's not actually doing anything...) The inflater is already passed in (which you use).
  • Pierre-Antoine
    Pierre-Antoine over 10 years
    Could you give more details?