Activity如何改变Fragment的UI

在工作中我们经常会遇到Activity和Fragment交互,传递数据是比较容易实现,但是要用到Activity和Fragment之间互相改变彼此的UI,网上关于这个问题的解决方法还是很少的,我也没遇到合适的解决方案,自己在前人的基础上研究后创造了一种方法。使Activity和Fragment共享一个Handler,然后发送消息通知彼此更新。别的也不多说了,例子代码如下,

这是Activity的代码:

package com.example.fragmentandactivity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.app.FragmentActivity;import android.view.KeyEvent;import android.widget.Toast;public class MainActivity extends FragmentActivity {private Handler mHandler;private long lastPressBack;private boolean isFirstPressBack = true;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);getSupportFragmentManager().beginTransaction().replace(R.id.fragment_content, new HomeFragment()).commit();}public boolean onKeyDown(int keyCode, KeyEvent event) {super.onKeyDown(keyCode, event);if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {if(HomeFragment.changeText){Message msg = mHandler.obtainMessage();msg.what =0;mHandler.sendMessage(msg);HomeFragment.changeText=false;return false;}if (!isFirstPressBack) {if (System.currentTimeMillis() – lastPressBack > 2 * 1000) {lastPressBack = System.currentTimeMillis();} else {finish();}}lastPressBack = System.currentTimeMillis();Toast.makeText(this,getString(R.string.exit_app),Toast.LENGTH_SHORT).show();isFirstPressBack = false;return false;}return false;}public void setHandler(Handler handler) {mHandler = handler;}}

这是Fragment的代码:

package com.example.fragmentandactivity;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;public class HomeFragment extends Fragment{private TextView text;private MainActivity mActivity;public static boolean changeText=true;Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 0:text.setText("ChangedFragment");break;}}};public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {super.onCreateView(inflater, container, savedInstanceState);View view = inflater.inflate(R.layout.home_fragment, null);text=(TextView)view.findViewById(R.id.text);return view;}public void onAttach(Activity activity) {super.onAttach(activity);mActivity = (MainActivity) activity;mActivity.setHandler(handler);}public void onDestroy(){super.onDestroy();changeText=true;}}这是Activity中activity_main.xml代码:

<LinearLayout xmlns:android=""android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ffffff"android:clickable="true"android:orientation="vertical" ><FrameLayoutandroid:id="@+id/fragment_content"android:layout_width="match_parent"android:layout_height="match_parent" ></FrameLayout></LinearLayout>这是Fragment中home_fragment代码:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:text="OriginalFragment"android:layout_margin="20dp"android:textSize="30sp" /><TextViewandroid:id="@+id/text2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_below="@id/text"android:text="高磊"android:textSize="23sp"android:textColor="#ff0000" /></RelativeLayout>

源码地址欢迎光临………

,愚者用肉体监视心灵,智者用心灵监视肉体

Activity如何改变Fragment的UI

相关文章:

你感兴趣的文章:

标签云: