Java – super in the fragment onCreateView

I completed coursera course on mobile application programming for Android handheld system

This is the code of mainactivity:

package course.examples.Fragments.StaticLayout;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import course.examples.Fragments.StaticLayout.TitlesFragment.ListSelectionListener;

public class QuoteViewerActivity extends Activity implements
        ListSelectionListener {

    public static String[] mTitleArray;
    public static String[] mQuoteArray;
    private QuotesFragment mDetailsFragment;

    private static final String TAG = "QuoteViewerActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mTitleArray = getResources().getStringArray(R.array.Titles);    
        mQuoteArray = getResources().getStringArray(R.array.Quotes);

        setContentView(R.layout.main);

        mDetailsFragment = (QuotesFragment) getFragmentManager()
                .findFragmentById(R.id.details);        
    }

    @Override
    public void onListSelection(int index) {
        if (mDetailsFragment.getShownIndex() != index) {        
            mDetailsFragment.showQuoteAtIndex(index);
        }
    }

This is the code for the quote fragment:

package course.examples.Fragments.StaticLayout;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class QuotesFragment extends Fragment {

    private TextView mQuoteView = null;
    private int mCurrIdx = -1;
    private int mQuoteArrayLen;

    private static final String TAG = "QuotesFragment";

    public int getShownIndex() {
        return mCurrIdx;
    }

    public void showQuoteAtIndex(int newIndex) {
        if (newIndex < 0 || newIndex >= mQuoteArrayLen)
            return;
        mCurrIdx = newIndex;
        mQuoteView.setText(QuoteViewerActivity.mQuoteArray[mCurrIdx]);
    }
@Override
public void onAttach(Activity activity) {
    Log.i(TAG,getClass().getSimpleName() + ":entered onAttach()");
    super.onAttach(activity);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    Log.i(TAG,getClass().getSimpleName() + ":entered onCreate()");
    super.onCreate(savedInstanceState);
}

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

@Override
public void onActivityCreated(Bundle savedInstanceState) {      
    super.onActivityCreated(savedInstanceState);
    mQuoteView = (TextView) getActivity().findViewById(R.id.quoteView);
    mQuoteArrayLen = QuoteViewerActivity.mQuoteArray.length;
}

This is the code for the title fragment:

package course.examples.Fragments.StaticLayout;

import android.app.Activity;
import android.app.ListFragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class TitlesFragment extends ListFragment {
    private ListSelectionListener mListener = null;
    private static final String TAG = "TitlesFragment";

    public interface ListSelectionListener {
        public void onListSelection(int index);     
    }

    @Override
    public void onListItemClick(ListView l,View v,int pos,long id) {
        getListView().setItemChecked(pos,true);
        mListener.onListSelection(pos);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (ListSelectionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnArticleSelectedListener");
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.i(TAG,getClass().getSimpleName() + ":entered onCreate()");
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater,Bundle savedInstanceState) {
        Log.i(TAG,getClass().getSimpleName() + ":entered onCreate()");

        **return super.onCreateView(inflater,savedInstanceState);**

    }

    @Override
    public void onActivityCreated(Bundle savedState) {
        super.onActivityCreated(savedState);

        getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        setlistadapter(new ArrayAdapter<String>(getActivity(),R.layout.title_item,QuoteViewerActivity.mTitleArray));
    }

MainActivity xml

<?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:baselineAligned="false"
    android:orientation="horizontal" >

    <fragment
        android:id="@+id/titles"
        android:layout_width="0px"
        android:layout_height="match_parent"
        android:layout_weight="1"
        class="course.examples.Fragments.StaticLayout.TitlesFragment" />

    <fragment
        android:id="@+id/details"
        android:layout_width="0px"
        android:layout_height="match_parent"
        android:layout_weight="2"
        class="course.examples.Fragments.StaticLayout.QuotesFragment" />

</LinearLayout>

Reference fragment XML

<?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/quoteView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="5dip"
        android:textSize="32sp" >
    </TextView>
</LinearLayout>

Header fragment XML

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?android:attr/activatedBackgroundIndicator"
    android:orientation="vertical"
    android:padding="5dip"
    android:textSize="32sp" >

</TextView>

My question is why the methods under oncreateview are different under the quote fragment and the title fragment? Quotefragment returns an inflator inflate(R.layout.quote_fragment,false); Titlefragment returns super onCreateView(inflater,savedInstanceState);

Solution

Because quotesfragment extends the fragment without layout by default, and users must expand and return to their own layout This is what the oncreateview method of fragment looks like:

public View onCreateView(LayoutInflater inflater,Bundle savedInstanceState) {
    return null;
}

Titlesfragment extends listfragment. By default, it contains a layout, including listview of the item, textview and ProgressBar of the tag when the list is empty In this case, the user does not have to return his own view and can return the object obtained by the super call Oncreateview of listfragment:

public View onCreateView(LayoutInflater inflater,Bundle savedInstanceState) {
    return inflater.inflate(com.android.internal.R.layout.list_content,false);
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>