android学习日记:fragment运用
2013-01-05 16:15
417 查看
今天认真学习了API上关于fragment的谷歌源码,包含了状态记录、fragment动态添加、以及接口的运用,特此记录。以下是详细代码:
package com.example.myfragment; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import com.example.myfragment.HeadlinesFragment.OnHeadlinesSelected; public class MainActivity extends FragmentActivity implements OnHeadlinesSelected{ @Override public void onCreate(Bundle savedInstanceState) { /* * 最开始的布局,获得一个HeadlinesFragment实例,然后用该实例替换掉fragment_container * HeadlinesFragment会在onCreate时就设定好适配器填充布局 */ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); HeadlinesFragment firstFragment = new HeadlinesFragment(); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, firstFragment).commit(); } @Override public void OnArticleSelected(int position) { // TODO Auto-generated method stub /* * 通过重写HeadlinesFragment中的接口方法来实现单击listItem时的事件。 * 首先要获得一个ArticlesFragment的实例,新建的ArticlesFragment是空的, * 必需用一个参数来填充该ArticlesFragment才有效果,而这个参数在单击Item时 * 就已经可以确定了,position就是该Item的ID号。 * 然后用得到的ArticlesFragment的实例来替换掉fragment_container即可。 */ Bundle args = new Bundle(); args.putInt(ArticlesFragment.ARG_POSIION, position); ArticlesFragment newFragment = new ArticlesFragment(); newFragment.setArguments(args); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, newFragment) .addToBackStack(null).commit(); } }
package com.example.myfragment; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; public class HeadlinesFragment extends ListFragment{ OnHeadlinesSelected myCallback; /* * 定义一个共用接口来实现HeadlinesFragment和MainActivity之间的通信, * 通过下面的onAttach方法来将两者联系到一起。 */ public interface OnHeadlinesSelected{ public void OnArticleSelected(int position); } @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); try{ myCallback = (OnHeadlinesSelected)activity; }catch(ClassCastException e){ } } /* * 用一个简单的适配器来填充HeadlinesFragment,填充的内容可以根据Ipsum定义的字串数组随意改变。 */ @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_activated_1, Ipsum.headlines)); } /* * 调用主方法中的方法来改变布局。OnArticleSelected的定义在主方法中,而调用在这里进行。 */ @Override public void onListItemClick(ListView l, View v, int position, long id) { // TODO Auto-generated method stub myCallback.OnArticleSelected(position); } }
package com.example.myfragment; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class ArticlesFragment extends Fragment{ /* * ARG_POSIION全局静态变量用来作为position的标签,mCurrentPosition初始值 * 为-1,防止它在没有被赋值的情况下使用而出现错误界面。 */ public static String ARG_POSIION = "position"; private int mCurrentPosition = -1; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.article_view, container, false); } /* * 在onStart中获得从HeadlinesFragment传入的args,然后调用updateArticles显示articles的内容。 */ @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); Bundle args = getArguments(); updateArticles(args.getInt(ARG_POSIION)); } private void updateArticles(int position){ TextView tx = (TextView)getActivity().findViewById(R.id.textview); tx.setText(Ipsum.articles[position]); mCurrentPosition = position; } @Override public void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); outState.putInt(ARG_POSIION, mCurrentPosition); } }
package com.example.myfragment; public class Ipsum { public static String[] headlines = { "choice one", "choice two", "choice three" }; public static String[] articles = { "text one", "text two", "text three" }; }
相关文章推荐
- android学习日记之fragment
- android学习日记(七):ViewPager+Fragment
- Android学习路线(二十四)ActionBar Fragment运用最佳实践
- android学习日记:AsyncTask的运用
- android 成长日记 8.Fragment学习之方法回调
- Android学习路线(二十)运用Fragment构建动态UI
- Android学习路线(二十)运用Fragment构建动态UI
- android学习日记(二):Fragment的详解下
- Android学习路线(二十四)ActionBar Fragment运用最佳实践
- android学习日记(四):Fragment的实战下
- android学习日记(三):Fragment的实战上
- Android学习路线(二十一)运用Fragment构建动态UI——创建一个Fragment
- Android学习路线(二十一)运用Fragment构建动态UI——创建一个Fragment
- Android学习日记(yzy):Fragment与VierPager简单实现
- android 成长日记 9.Fragment学习过程总结,口述版
- android Fragment demo学习
- Android 学习之Fragment的创建
- Android学习之Fragment
- android学习日记03-第一次创建项目错误解决
- android学习日记——activity生命周期二