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编辑  收藏  举报