Note:本例有两个Fragment,并且Fragment之间能够进行通信,每当点击左边fragment的item时,都会在右边的fragment中显示对应的内容。需要整个工程的请到我的资源里下载fragmentlayou123.

本程序涉及3个.java文件:Fragmentlayout123Activity.java、DetailsFragment.java、TitleFragment.java。其中各个部分的功能如下:

1、在Fragmentlayout123Activity.java中,设置了fragment_layout布局,并建了一个DetailsActivity,用在手机上显示。

public class Fragmentlayout123Activity extends Activity {    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.fragment_layout);    }    /**     * This is a secondary activity, to show what the user has selected     * when the screen is not large enough to show it all in one activity.     */    public class DetailsActivity extends Activity {        @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            if (getResources().getConfiguration().orientation                    == Configuration.ORIENTATION_LANDSCAPE) {                // If the screen is now in landscape mode, we can show the                // dialog in-line with the list so we don't need this activity.                finish();                return;            }            if (savedInstanceState == null) {                // During initial setup, plug in the details fragment.                DetailsFragment details = new DetailsFragment();                details.setArguments(getIntent().getExtras());                getFragmentManager().beginTransaction().add(android.R.id.content, details).commit();            }        }    }}

2、在DetailsFragment.java中,方法newInstance用于新建一个DetailFragment,onCreateView用来产生DetailFragment的View。

public class DetailsFragment extends Fragment {/**Create a new instance of DetailsFragment, initialized to show the text at 'index'.*/public static DetailsFragment newInstance(int index) {DetailsFragment f = new DetailsFragment();// Supply index input as an argument.Bundle args = new Bundle();args.putInt("index", index);//给Fragment初始化参数f.setArguments(args);return f;}public int getShownIndex() {return getArguments().getInt("index", 0);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {if (container == null) {// We have different layouts, and in one of them this// fragment's containing frame doesn't exist. The fragment// may still be created from its saved state, but there is// no reason to try to create its view hierarchy because it// won't be displayed. Note this is not needed -- we could// just run the code below, where we would create and return// the view hierarchy; it would just never be used.return null;}ScrollView scroller = new ScrollView(getActivity());TextView text = new TextView(getActivity());int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getActivity().getResources().getDisplayMetrics());// hetao:设置边框大小text.setPadding(padding, padding, padding, padding);scroller.addView(text);text.setText(DIALOGUE[getShownIndex()]);return scroller;}public static final String[] DIALOGUE = {"So shaken as we are, so wan with care,"+ "In forwarding this dear expedience.","Hear him but reason in divinity,"+ "From open haunts and popularity.","I come no more to make you laugh: things now,"+ "A man may weep upon his wedding-day.","First, heaven be the record to my speech!"+ "What my tongue speaks my right drawn sword may prove.","Now is the winter of our discontent"+ "Clarence comes.","To bait fish withal: if it will feed nothing else,"+ "will better the instruction.","Virtue! a fig! 'tis in ourselves that we are thus"+ "you call love to be a sect or scion.","Blow, winds, and crack your cheeks! rage! blow!"};public static final String[] TITLES = { "Henry IV (1)", "Henry V","Henry VIII", "Richard II", "Richard III", "Merchant of Venice","Othello", "King Lear" };}

3、在TitleFragment.java中,onActivityCreated用来初始化TitleFragment,showDetails用来显示选中Item的内容。

public class TitlesFragment extends ListFragment {    boolean mDualPane;//检验是否有DetailFragment,没有就另起一个activity    int mCurCheckPosition = 0;    @Override  //初始化TitleFragment    public void onActivityCreated(Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        // Populate list with our static array of titles.        setListAdapter(new ArrayAdapter(getActivity(),                android.R.layout.simple_list_item_activated_1, TITLES));        // Check to see if we have a frame in which to embed the details        // fragment directly in the containing UI.        View detailsFrame = getActivity().findViewById(R.id.details);        mDualPane = detailsFrame != null && detailsFrame.getVisibility() == View.VISIBLE;        if (savedInstanceState != null) {            // Restore last state for checked position.            mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);        }        if (mDualPane) {            // In dual-pane mode, the list view highlights the selected item.            getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);            // Make sure our UI is in the correct state.            showDetails(mCurCheckPosition);        }    }    @Override    public void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        outState.putInt("curChoice", mCurCheckPosition);    }    @Override    public void onListItemClick(ListView l, View v, int position, long id) {        showDetails(position);    }    /**     * Helper function to show the details of a selected item, either by     * displaying a fragment in-place in the current UI, or starting a     * whole new activity in which it is displayed.     */    void showDetails(int index) {        mCurCheckPosition = index;        if (mDualPane) {            // We can display everything in-place with fragments, so update            // the list to highlight the selected item and show the data.            getListView().setItemChecked(index, true);            // Check what fragment is currently shown, replace if needed.            DetailsFragment details = (DetailsFragment)                    getFragmentManager().findFragmentById(R.id.details);            if (details == null || details.getShownIndex() != index) {                details = DetailsFragment.newInstance(index);                // Execute a transaction, replacing any existing fragment                // with this one inside the frame.                FragmentTransaction ft = getFragmentManager().beginTransaction();                ft.replace(R.id.details, details);                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);                ft.commit();            }        } else {            // Otherwise we need to launch a new activity to display            // the dialog fragment with selected text.            Intent intent = new Intent();            intent.setClass(getActivity(), DetailsActivity.class);            intent.putExtra("index", index);            startActivity(intent);        }    }    //copied by hetao    public static final String[] TITLES =     {            "Henry IV (1)",               "Henry V",            "Henry VIII",                   "Richard II",            "Richard III",            "Merchant of Venice",              "Othello",            "King Lear"    };}

其中还涉及到一个布局文件fragment_layout.xml



 

更多相关文章

  1. 多种方式实现Android页面布局的切换
  2. Android(安卓)MMS/SMS 入口
  3. android关于popupWindow不显示
  4. Android(安卓)Studio 布局文件格式化代码
  5. Android(安卓)图片处理 之 Bitmap
  6. 3.addView调用之后导致子布局的android:layout_width="match_par
  7. Android(安卓)ConstraintLayout布局详解
  8. Android加载长图之Scrollview嵌套ImageView
  9. Android(安卓)用户界面(User Interface)

随机推荐

  1. 使用adb命令启动Android程序
  2. ListView.CHOICE_MODE_MULTIPLE
  3. do you know any crossplatform sound ef
  4. Android Post图片和数据
  5. Android 渐变色TextView
  6. android如何获取后台正在运行的service
  7. android使用全局变量的方法
  8. 一些 android 项目
  9. android 使用数据库事务提高操作效率
  10. springmvc服务端+android客户端的文件上