如何通过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的数据。  

最新文章

  1. Hint when use HTTPAgilityPack
  2. Android新建数据库和建表demo
  3. 批量删除wordpress垃圾评论留言
  4. sql 表连接 join
  5. linux命令(3):复制,剪切(文件和文件夹)
  6. Jquery动画效果--地铁站名指示等效果
  7. 合并多个List&lt;T&gt;类型并通过LINQ按指定属性排序
  8. Cpp多重继承会产生的问题
  9. Java-马士兵设计模式学习笔记-观察者模式-OOD 线程 改进
  10. Windows下环境变量配置
  11. 运用surfaceView与MediaPlayer实现播放视频的功能
  12. 【CSS】Intermediate2:Grouping and Nesting
  13. 讨厌OpenSSL
  14. Asp.Net异步编程
  15. File类 详解!
  16. tcp协议下粘包问题的产生及解决方案
  17. centos6 安装python2.7 并做软件兼容处理 及 MySQLdb模块安装
  18. Nunit测试工具使用
  19. 【SqlServer】SqlServer的常规操作
  20. wpf 用户自定义事件传参

热门文章

  1. ES6(五) 数组扩展
  2. Win7网上邻居提示未授予用户在此计算机上的请求登录类型解决办法
  3. MySQL 注册码
  4. LB 负载均衡的层次结构
  5. ubuntu下rhythmbox歌名显示乱码问题解决
  6. Azure PowerShell (4) 使用PowerShell管理多个订阅
  7. SQL Azure (14) 将云端SQL Azure中的数据库备份到本地SQL Server
  8. ASP.NET MVC 从零开始 - Web.config
  9. Java 积累复习用
  10. Docker实践:运行Python应用