我完成了针对
Android手持系统的移动应用编程的Coursera课程.
课程中的一个示例代码告诉我们如何对我们进行分片.基本上它的作用是将屏幕分成两个片段,一个用于书名,一个用于书中的引用.如果用户单击左侧片段中的标题,则从该书中关联的引用将显示在右侧的片段中.
这是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);
}
}
这是Quote片段的代码:
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;
}
这是标题片段的代码:
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(getActivity(),R.layout.title_item,QuoteViewerActivity.mTitleArray));
}
MainActivity xml
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="horizontal" >
android:id="@+id/titles"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
class="course.examples.Fragments.StaticLayout.TitlesFragment" />
android:id="@+id/details"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="2"
class="course.examples.Fragments.StaticLayout.QuotesFragment" />
引用片段xml
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
android:id="@+id/quoteView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dip"
android:textSize="32sp" >
标题片段xml
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?android:attr/activatedBackgroundIndicator"
android:orientation="vertical"
android:padding="5dip"
android:textSize="32sp" >
我的问题是为什么onCreateView下的方法在Quote片段和Title片段下有所不同?
QuoteFragment返回inflater.inflate(R.layout.quote_fragment,false);
TitleFragment返回super.onCreateView(inflater,savedInstanceState);