zoukankan      html  css  js  c++  java
  • Fragment基础信息传递

    如何通过activity来访问fragment的信息呢,我们可以通过一个实例来了解。

    使用两个Fragment和一个activity管理

    效果图:

    第一个fragment来表示输入框

    第二个fragment表示listview内容

    最终由activity来控制两个fragment。

    实现方法:

    fragment与其附着的activity之间的通讯最佳方式:
    1, 在发起事件的fragment中定义一个接口,借口中声明你的方法
    2,在onattach中要求activity实现该接口
    3,在activity实现方法

    具体代码:

    step 1:创建Framlayou并与相应的Fragment创建联系

    <FrameLayout
            android:id="@+id/fragment_edit_text"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
    <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
    

    step 2 :监听封装了EditText的Fragment的回车事件,并使用最佳通讯方式将信息传给Activity 

    public class FragmentEditText extends Fragment {
        private View view;
        private OnEnterClickedListener mListener;
        private String message;
        private EditText editText;
    
        public interface OnEnterClickedListener {
            public void onEnterClicked(String message);
        }
    
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            try {
                mListener = (OnEnterClickedListener) activity;
            } catch (ClassCastException e) {
                throw new ClassCastException(activity.toString()
                        + " must implement OnArticleSelectedListener");
            }
    
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            view = inflater.inflate(R.layout.fragment_edit_text, container,false);
    
            editText = (EditText) view.findViewById(R.id.fragment_et);
            editText.setOnKeyListener(new OnKeyListener() {
    
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if (event.getAction() == KeyEvent.ACTION_DOWN) {
                        System.out.println("Action_down");
                        if (keyCode == KeyEvent.KEYCODE_ENTER) {
                            message = editText.getText().toString();
                            mListener.onEnterClicked(message);
                            System.out.println(message + "messagesdfsd");
                            editText.setText("");
                            return true;
                        }
                    }
                    return false;
                }
            });
            return view;
        }

    step 3 :在activity中实现方法,其中内容的Fragment继承ListFragment可以不覆写任何方法,直接使用,具体参见AndroidDoc

      

    public class MainActivity extends Activity implements OnEnterClickedListener {
    	private List<String> data;
    	private ArrayAdapter<String> adapter;
    	private FragmentContainer fragmentContainer;
    	private FragmentManager fragmentManager;
    	private FragmentTransaction beginTransaction;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		data = new ArrayList<String>();
    
    		adapter = new ArrayAdapter<String>(this,
    				android.R.layout.simple_list_item_1, data);
    
    		fragmentManager = getFragmentManager();
    		beginTransaction = fragmentManager.beginTransaction();
    
    		fragmentContainer = new FragmentContainer();
    		fragmentContainer.setListAdapter(adapter);
    
    		beginTransaction.add(R.id.fragment_container, fragmentContainer);
    		beginTransaction.add(R.id.fragment_edit_text, new FragmentEditText());
    
    		beginTransaction.commit();
    
    	}
    
    	public void onEnterClicked(String message) {
    
    		data.add(message);
    		adapter.notifyDataSetChanged();
    	}
    }
    

    主要知识点就是利用接口的方式让activity操作Fragment的数据。  

  • 相关阅读:
    Finalize,Dispose,SuppressFinalize
    防火防盗防微软,Firefox发布插件自动检测服务
    Nginx的Rewrite设置及示例
    Linux游戏开发包 ClanLib 2.1.0 发布
    HTTP协议详解(真的很经典)
    Linux on POWER:发行版迁移和二进制兼容性考虑事项
    映射网络驱动器VBS脚本
    [笔记] 使用 opcache 优化生产环境PHP
    2020最新版MySQL数据库面试题(三)
    请注意,面试中有这7个行为肯定会被拒绝!
  • 原文地址:https://www.cnblogs.com/Singleorb/p/5184062.html
Copyright © 2011-2022 走看看