需求场景:在fragment中输入数据,通过activity,将数据加载到另外一个fragment中显示出来
流程梳理:
在输入数据的fragment类中定义一个接口,接口参数为所需传递的数据-->activity需实现该接口并在接口方法中处理传递过来的数据--->fragment通过在onAttach方法或者activity对象的引用,进而在获得数据后通过activity对象的应用调用该接口方法
废话补多少,直接上代码
public class NewItemFragment extends Fragment {
private OnNewItemAddedListener onNewItemAddedListener;
public interface OnNewItemAddedListener {
public void onNewItemAdded(String newItem);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.new_item_fragment, container, false);
final EditText myEditText =
(EditText)view.findViewById(R.id.myEditText);
myEditText.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN)
if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) ||
(keyCode == KeyEvent.KEYCODE_ENTER)) {
String newItem = myEditText.getText().toString();
onNewItemAddedListener.onNewItemAdded(newItem);
myEditText.setText("");
return true;
}
return false;
}
});
return view;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
//activity为管理fragment的容器,在这里可获得一个父容器的实例对象,
try {
onNewItemAddedListener = (OnNewItemAddedListener)activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() +
" must implement OnNewItemAddedListener");
}
}
}
package com.paad.todolist;
import java.util.ArrayList;
import android.app.Activity;
import android.app.FragmentManager;
import android.os.Bundle;
import android.widget.ArrayAdapter;
public class ToDoListActivity extends Activity implements NewItemFragment.OnNewItemAddedListener {
private ArrayAdapter<String> aa;
private ArrayList<String> todoItems;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Inflate your view
setContentView(R.layout.main);
// Get references to the Fragments
FragmentManager fm = getFragmentManager();
ToDoListFragment todoListFragment =
(ToDoListFragment)fm.findFragmentById(R.id.TodoListFragment);
// Create the array list of to do items
todoItems = new ArrayList<String>();
// Create the array adapter to bind the array to the listview
aa = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
todoItems);
// Bind the array adapter to the listview.
todoListFragment.setListAdapter(aa);
}
public void onNewItemAdded(String newItem) {
todoItems.add(newItem);
aa.notifyDataSetChanged();
}
}
Android 学习之Activity与Fragment之间的信息传递
原文:http://my.oschina.net/zaizaiangels/blog/514712