zoukankan      html  css  js  c++  java
  • 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共享事件

  • 相关阅读:
    一次向svn中增加所有新增文件 svn add all new files
    cocos2d-x Lua与OC互相调用
    IOS8开发之实现App消息推送
    IOS Remote Notification
    再见
    vue中$router.push打开新窗口
    nuxt拦截IE浏览器
    百度统计api获取数据
    css滚动条样式自定义
    nuxt框架Universal和Spa两种render mode的区别
  • 原文地址:https://www.cnblogs.com/liangxinzhi/p/4275634.html
Copyright © 2011-2022 走看看