ListFragment与Activity共享事件
官网有详细的Fragment的描述:
http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity
说说个人理解:
Fragment在API level 11中首次被添加,你可以把它当成一个模块来使用,你可以自定义Fragment的内容,可以在多个Activity中重复使用它,可以将它嵌入到Activity中,换句话说它就是Activity的缩小版,只不过不能单独存在.
接下来说说要做件什么事:使用ListFragment显示信息,单击LisFragmentt列表中的某一项后,将调用Activity来处理相应的事件,不多说,直接源码
首先是布局文件
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
><TextView
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="国别:"
/></LinearLayout>
接着是 MainActivity.java
package com.under.fragment_test;
import android.os.Bundle;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.Toast;public class MainActivity extends Activity implements
FragmentA.OnArticleSelectListener {String[] displayStrings = new String[] { "中国", "美国", "韩国", "日本", "澳大利亚" }; // 定义ListFragment显示的数据源
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
MainActivity.this, android.R.layout.simple_dropdown_item_1line,
displayStrings); //定义一个数组适配器
FragmentManager fragmentManager = getFragmentManager(); //获取Fragment管理器
//因为Fragment添加到Activity中需要使用FragmentTransaction来添加
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction(); //开始事务
FragmentA fragmentA = new FragmentA();
fragmentTransaction.add(R.id.main_id, fragmentA); //添加Fragment到Activity中
fragmentTransaction.commit(); //提交事务
fragmentA.setListAdapter(adapter); //设置适配器
}@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}@Override
public void onArticleSelected(int id) { //FragmentA的FragmentA.OnArticleSelectListener接口事件
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, displayStrings[id], 1).show(); //显示点击的某项
}}
接着是FragmengA.java
package com.under.fragment_test;
import android.app.Activity;
import android.app.ListFragment;
import android.view.View;
import android.widget.ListView;public class FragmentA extends ListFragment{
OnArticleSelectListener onArticleSelectListener;
public interface OnArticleSelectListener{
public void onArticleSelected(int id);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
onArticleSelectListener.onArticleSelected(position); //将列表项的单件事件传递给onAttach中绑定的activity
}
@Override
public void onAttach(Activity activity) { //将FragmentA添加到Activity中的时候 系统会自动的调用onAttach方法,将Activity与FragmentA进行绑定
// TODO Auto-generated method stub
super.onAttach(activity);
try {
onArticleSelectListener=(OnArticleSelectListener)activity;
} catch (Exception e) { //如果activity没有实现OnArticleSelectListener这个接口 系统会报错
// TODO: handle exception
throw new ClassCastException(activity.toString()+" must implements OnArticleSelectListener");
}
}
}
这样就实现了ListFragment与Activity共享事件
posted on 2013-05-29 19:14 liangxinzhi 阅读(134) 评论(0) 编辑 收藏 举报