您的位置:首页 > 移动开发 > Android开发

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"
};
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: