Fragment基础----信息传递

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的数据。  

以上是关于Fragment基础----信息传递的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 Fragment 传递到另一个 Fragment

完全下载文件时,将下载的文件从一个片段传递到另一个片段

如何在活动和片段之间传递对象

如何通过代码设置片段标签?

如何将数据从 Intent 传递到 Fragment

如何将变量从 Activity 传递到 Fragment,并将其传回?