0

1- I want to use ListFragment.

2 - My class extends from Activity not a ListActivity (because I want to have a TextView at the top of ListView). as a result this is the main layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
            android:id="@+id/txt"
            android:layout_width="fill_parent"
            android:layout_height="40sp" />

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

</LinearLayout>

And this my code:

public class List1 extends SherlockListFragment {

    private ArrayList<String> list = new ArrayList<String>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        System.out.println("onCreate............");

        for(int i=0; i<30; i++)
            list.add("item " + i);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        System.out.println("onCreateView.................");

        View view = inflater.inflate(R.layout.main_list1, container, false);

        TextView label = (TextView) view.findViewById(R.id.txt);
        label.setText("Hello");

        ListView lv = (ListView) view.findViewById(R.id.listView);
          lv.setAdapter(new MultiAdapter(view.getContext()));

        return view;
    }

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        System.out.println("onActivityCreated..........");


    }

    private class MultiAdapter extends ArrayAdapter<String> {

        public MultiAdapter(Context context) {
            super(context, R.layout.list1, list);
        }

        @Override
        // Called when updating the ListView
        public View getView(int position, View convertView, ViewGroup parent) {

            View row;

            if (convertView == null)  {
                LayoutInflater inflater = getActivity().getLayoutInflater();
                row = inflater.inflate(R.layout.list1, parent, false);
            } else
                row = convertView;

            TextView txt = (TextView) row.findViewById(R.id.label);
            txt.setText(list.get(position));    

            return row;
        }
    }

The application crashed when I go to this Fragment using Tab. This is the exception that I got in log:

01-01 14:59:51.154: E/AndroidRuntime(20091): FATAL EXCEPTION: main
01-01 14:59:51.154: E/AndroidRuntime(20091): java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.support.v4.app.ListFragment.ensureList(ListFragment.java:344)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.support.v4.app.ListFragment.onViewCreated(ListFragment.java:145)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:884)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at com.example.tabtest.FragmentTab$TabManager.onTabChanged(FragmentTab.java:134)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.widget.TabHost.invokeOnTabChangeListener(TabHost.java:359)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.widget.TabHost.setCurrentTab(TabHost.java:344)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:132)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:458)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.view.View.performClick(View.java:2533)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.view.View$PerformClick.run(View.java:9320)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.os.Handler.handleCallback(Handler.java:587)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.os.Handler.dispatchMessage(Handler.java:92)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.os.Looper.loop(Looper.java:150)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at android.app.ActivityThread.main(ActivityThread.java:4385)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at java.lang.reflect.Method.invokeNative(Native Method)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at java.lang.reflect.Method.invoke(Method.java:507)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
01-01 14:59:51.154: E/AndroidRuntime(20091):    at dalvik.system.NativeStart.main(Native Method)

1 Answer 1

1

Your fragment layout must have a ListView with the id: android.R.id.list, otherwise android will not know which ListView to use.

Like this:

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

Notice the android:id="@android:id/list".

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.