Activity與Fragment通過介面回撥進行通訊
介面回撥在Android中有很多的應用,比如Activity裡的onCreat、onDestroy等方法,按鍵事件監聽。Android對Fragment的是在Android3.0時加入的,所以Android3.0
以前的系統並不支援Fragment,而為了使3.0以前的版本也支援Fragment,Google便推出了Android-support-v4.jar。我這裡使用的是Android系統自帶的Fragment,而不是使用Android-support-v4.jar包裡的Fragment。Activity新增Fragment有靜態和動態兩種方式,本文使用靜態方式新增Fragment。下面具體介紹:
本工程實現的功能是:點選FragmentFirst裡的FirstBtn按鈕在FragmentSecond裡顯示“點選了btn1”,點選FragmentFirst裡的SecondBtn按鈕在FragmentSecond裡顯示“點選了btn2”。效果圖如下
第一步是搭建工程框架:
Activity:1個 ;layout:3個;Fragment:2個 ;
MainActivity對應activity_main.layout ;FragmentFirst對應fragment_first.xml ;FragmentSecond對應fragment_second.xml ;
工程目錄結構如下圖。
第二步:寫xml佈局檔案
在activity_main.xml檔案裡面包含了兩個fragment控制元件。很顯然包含的是我們要使用的兩個fragment,如下圖:
再看fragment_first.xml檔案,包含了兩個按鈕,用來出發事件,如下圖:
最後看一下fragment_second.xml檔案,僅僅包含了一個TextVIew控制元件用於顯示按鈕觸發後的內容顯示,如下圖:
第三步:FragmentFirst、FragmentSecond、MainActivity的實現
FragmentFirst與MainActivity之間使用介面回撥的方法進行通訊。總體來說,在FragmentFirst裡宣告、定義、初始化、使用介面FragmentFirstInterface,FragmentFirstInterface 在類FragmentFirst裡面;而在MainActivity裡面繼承介面FragmentFirstInterface,並具體實現介面函式public void fragment_first_callback(String str)
介面的宣告:
<span style="white-space:pre"> </span>/*
* 回撥介面宣告
* */
public interface FragmentFirstInterface {
public void fragment_first_callback(String str);
}
介面的定義:
<span style="white-space:pre"> </span>/*
* 回撥介面定義
* */
private FragmentFirstInterface fragmentFirstInterface;
在Fragment的回撥函式onAttach裡面對介面進行初始化:
<span style="white-space:pre"> </span>@Override
public void onAttach(Activity activity){
super.onAttach(activity);
/*
* 回撥介面初始化
* */
fragmentFirstInterface = (FragmentFirstInterface) activity;
}
介面的使用是在點選按鈕的時候:
<span style="white-space:pre"> </span>getActivity().findViewById(R.id.btn_1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
/*
* 呼叫回撥介面函式
* */
fragmentFirstInterface.fragment_first_callback("btn1");
}
});
getActivity().findViewById(R.id.btn_2).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
/*
* 呼叫回撥介面函式
* */
fragmentFirstInterface.fragment_first_callback("btn2");
}
});
這樣在FragmentFirst對介面的操作已經完成,那麼點選了按鈕以後在MainActivity裡是如何處理就能是activity接受到這個按鈕的點選事件呢?首先是MainActivity繼承回撥介面,然後實現介面回撥函式:
public class MainActivity extends Activity implements FragmentFirstInterface{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void fragment_first_callback(String str) {
// TODO Auto-generated method stub
if(str.equals("btn1")){
FragmentManager fragmentManager = getFragmentManager();
FragmentSecond fragmentSecond = (FragmentSecond)fragmentManager.findFragmentById(R.id.frament_2);
fragmentSecond.setTv("btn1");
}
if(str.equals("btn2")){
FragmentManager fragmentManager = getFragmentManager();
FragmentSecond fragmentSecond = (FragmentSecond)fragmentManager.findFragmentById(R.id.frament_2);
fragmentSecond.setTv("btn2");
}
}
}
到這裡呢,MainActivity就獲得了FragmentFirst的點選事件。其實這個有點像C語言裡的函式呼叫,在fragment裡面需要的地方呼叫回撥函式,在activity裡具體實現該函式。那麼再MainActivity裡獲取FragmentFirst的點選事件後如何通知FragmentSecond進行顯示呢?看下面FragmentSecond裡的程式碼:
public class FragmentSecond extends Fragment{
TextView fs_tv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_second, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
fs_tv = (TextView)getActivity().findViewById(R.id.fs_tv);
}
public void setTv(String str){
fs_tv.setText("點選了" + str);
}
}
在FragmentSecond的回撥函式onActivityCreated裡面初始化TextView,這裡由於Fragment的生命週期的問題,這個不能在onCreateView中實現。具體原因,大家可以看這個部落格:http://blog.csdn.net/harvic880925/article/details/44917955
在MainActivity裡面直接使用findFragmentById()函式獲取frament_2,然後呼叫FragmentSecond裡的public void setTv(String str)方法來控制控制元件的顯示。
至此,就分析完了這個過程。不對的地方希望大家多多指正。
原始碼在:http://download.csdn.net/detail/dingfengen/9504561
相關推薦
Activity與Fragment通過介面回撥進行通訊
介面回撥在Android中有很多的應用,比如Activity裡的onCreat、onDestroy等方法,按鍵事件監聽。Android對Fragment的是在Android3.0時加入的,所以Android3.0 以前的系統並不支援Fragment,而為了使3.0以前的
Adapter與Activity通過介面回撥進行互動
0. 前言 首先說明一下為什麼要寫這麼一篇部落格:最近看了一些其他人的專案,發現很多專案的做法是建立一個專門存放Adapter類的Package包,也有的專案乾脆直接都寫在Activity中。而我屬於
兩個Activity之間用介面回撥進行通訊
因為剛接觸的一個專案是藍芽連線,需求是要在掃描介面點選條目進行連線 時,在跳轉的另一個activity(姑且先叫它連線介面吧)上顯示連線的過程, 也就是彈出一個dialog,所以就需要用介面回撥
通過介面回撥方式來設定RecyclerView的條目點選監聽事件
提到RecyclerView大家總會拿它與ListView相比較, RecyclerView是具有比ListView更具擴充套件性的控制元件, RecyclerView繼承的是ViewGroup, 可以說也是ViewGroup的官方定義控制元件, Recycle
Android通過介面回撥來實現資料更新(Kotlin版)
最近開發一個專案,用的是kotlin,本人kotlin水平有限,還請諒解,需要在fragment修改資料,然後更新到activity中,我使用介面回撥來完成這個需求。 先上一張圖來看一下 修改完暱稱,不僅要在fragment裡更新資料,還要同步更新act
Android在BroadcastReceiver中通過介面回撥更新介面
之前寫廣播接收器都是寫在Activity的內部的,覺得看起來很亂的感覺,畢竟廣播也事和活動是同一級別的元件之一,哪兒能放在活動的裡面啊,決定就來封裝一下,發現居然沒有思路,,同事說用靜態類,直接點就可以了, 但是靜態類在記憶體中不會被回收,只有等程式結束後才會回收,所以決
介面回撥進行傳值——CallBack應用舉例
public class interface_class { int aaa=3652; int getdata(CALL call){ call.get_in(aaa); return 1; } } interface CALL {
Fragment學習之使用介面回撥的方式實現Fragment與Activity通訊
Fragment與Fragment之間可以進行資訊傳遞,同樣,Fragment與Activity也可以進行資訊的傳遞。 下面是一個演示在Activity中獲取來自Fragment的資訊,使用介面回撥的方法在Activity中接收資訊 MainActivity.java:
關於在Fragment中通過Activity介面回撥操作Fragment中控制元件報空指標問題
現象描述:當Activity中某個變數改變時候,需要通知到Fragment我們常常用介面實現...。。我們在Activity中先replace,commit該Fragment,接著呼叫介面需要改變變數的方法。。。然後我們在Fragment中的介面回撥方法裡,更具該變數操縱F
Android 介面回撥實現Fragment的跳轉
---------------------MainActivity------------------- package com.example.earl.fragmentinterfacejump; import android.app.Activity; import androi
介面回撥----點選item中的ImageView,在Activity中顯示dialog
在做專案的時候有一個功能是:點選listview的item中的一個圖示,在activity中彈出一個dialog.想到的一個辦法就是用介面回撥來實現.對於介面回撥這一塊我其實也還是不太懂,別人寫的複雜的一點的慢慢看也能看懂,但要自己寫的話,也就只能寫一些簡單的,這個demo就是一個很簡單
Activity與Fragment通訊 多介面實現優化
1.問題 我們都知道Activity與Fragment通訊的幾種方式,推崇的應該是谷歌給出的介面方案。 地址:https://developer.android.com/training/basics/fragments/communicating.html#DefineInterface
AIDL實現不同應用之間跨程序通訊及傳遞與返回各種資料型別和遠端介面回撥
含義:AIDL(Android Interface Definition Language),是android介面定義語言,這種語言定義了一個客戶端和伺服器通訊介面的一個標準、規範。 為什麼要有AIDL? 我們都知道android中的四大元件Activit
Android中Recyclerview使用7----條目中按鈕點選事件,在activity中呼叫(介面回撥)
0引入Recyclerview的支援庫 compile 'com.android.support:recyclerview-v7:23.4.0' 1效果圖: 2程式碼: 2.1MainActivity中: <span style="font-size:18p
利用介面回撥實現Fragment之間的跳轉
前言 在玩音樂播放器時,排行榜介面 涉及到幾個Fragment之間的跳轉,通過查詢自己做了一個小效果,感覺不錯,利用一個簡單的介面回撥, 分享給初學者做著玩。大神勿噴! 點選左側的按鈕,右側的內容隨著點選變化。 簡單介紹一下實現過程: 首先介面
Fragment(3)和其他Fragment之間互動--偉大的介面回撥
這個是我一直想要找的,沒想到偉大的官網竟然有。感動到流鼻涕了。。 為了重用Fragment UI元件,我們應該建立一個完全獨立的自控的,定義自己佈局和行為的模型元件。一旦我們定義了這些可重用的Fragments,我們就可以把它們和Activity關聯起來並且用應用邏輯連線
Fragment之間的傳值 介面回撥
//佈局 <fragment android:id="@+id/frag_left" android:name="baidumaplocation.bawei.com.chuanzhirecycle.Fragment1" android:layout_width=
Android Fragment和Activity之間通過介面互傳資料通訊
1.Fragment--->Activity傳遞資料:在Fragment中建立介面,並在相應點選事件中呼叫介面內的方法onDataAction//定義介面 public interface onFragment2ActivtyListener{ public
介面回撥在fragment中的使用
我們知道在兩個fragment之間傳遞資料要通過activity,如果兩個fragment之間發生了資料的傳遞,如果這時我們的螢幕發生翻轉activity將會啟動onCreate()方法,這時fragment中的狀態和資料將會被重置而得不到儲存,那麼如果我
Android中的介面回撥詳解,回撥機制:以Activity和Adapter傳遞資料為例。
首先解決啥是回撥: 我覺得這個例子比較好:某天,我打電話向你請教問題,當然是個難題,你一時想不出解決方法,我又不能拿著電話在那裡傻等,於是我們約定:等你想出辦法後打手機通知我,這樣,我就掛掉電話辦其它事情去了。過了XX分鐘,我的手機響了,你興高采烈的說問題已經搞定,應該