編輯:關於Android編程
其實Activity和fragment之間傳遞數據有很多方法,我這裡說一個用的比較多的一個方法——接口回調,後面有運行效果
接口回調有幾個步驟:
1,要傳遞數據的類A裡面定義一個接口X,接口裡面創建一個構造方法,方法裡面的參數就是你要傳遞的數據類型
2,創建一個公共的方法Y,方法裡的參數就是你創建的接口X
3,在要接收的類B裡面拿到A類的實例對象a,調用A裡面創建的公共的方法Y,
@@1.如果B是實現的A裡面定義的那個接口,並實現了X裡面的抽象方法,那麼A的對象a調用A裡面的公共方法Y時參數裡面傳遞this就行了
@@2.如果B裡面不是實現A裡面的那個接口,那麼A的對象a調用A裡面的公共方法Y時裡面傳遞new A.Y,他會自動添加X裡面未實現的方法
說的有點暈,還是看代碼好一點
首先當然是創建一個項目,activity的布局文件裡面放一個frameLayout,用來讓Fragment替換,底部放置兩個Button用來點擊切換fagment,具體代碼如下:
<framelayout android:id="@+id/main_frameLayout" android:layout_height="0dp" android:layout_weight="1" android:layout_width="match_parent"> </framelayout>
public interface DataChange {
void setDataChange(String qqq);
}
創建一個公共的方法,參數是接口,當然你的先聲明這個接口的對象:
static DataChange dataChange;
public void setData(DataChange dataChange) {
this.dataChange = dataChange;
}
具體請求數據的方法:
private void getData(String path) {
HttpUtils utils = new HttpUtils();
utils.send(HttpRequest.HttpMethod.GET, path, new RequestCallBack() {
@Override
public void onSuccess(ResponseInfo responseInfo) {
//拿到請求到的數據
String result = responseInfo.result;
//調用接口的方法把數據傳遞進去
if (dataChange!=null) {
dataChange.setDataChange(result);
}
}
@Override
public void onFailure(HttpException e, String s) {
Toast.makeText(MainActivity.this, "請求數據失敗"+s, Toast.LENGTH_SHORT).show();
}
});
}
具體替換的方法是
/**
* 用來讓Fragment替換framelayout的方法
*
* @param fragment
*/
private void changeFragment(Fragment fragment) {
getSupportFragmentManager().beginTransaction().replace(R.id.main_frameLayout, fragment).commit();
}
public void button(View view) {
switch (view.getId()) {
case R.id.button1:
changeFragment(fragmentA);
getData("http://mobile.ximalaya.com/mobile/v1/album?albumId=2839012");
break;
case R.id.button2:
changeFragment(fragmentB);
getData("http://mobile.ximalaya.com/mobile/v1/album?albumId=2839015");
break;
default:
break;
}
FragmentA裡面調用MainActivity裡面的方法:
//拿到MainActivity的對象,調用它裡面的方法
MainActivity activity = new MainActivity();
activity.setData(new MainActivity.DataChange() {
@Override
public void setDataChange(String aaa) {
textView.setText(aaa);
}
});
public class FragmentB extends Fragment implements MainActivity.DataChange然後實現接口裡面沒實現的方法:
/**
* 實現接口之後必須實現接口裡的抽象方法
* @param qqq
*/
@Override
public void setDataChange(String qqq) {
textView.setText(qqq);
}
//實現接口的方式調用mainActivity的方法 ((MainActivity)getActivity()).setData(this);
MainActivity代碼如下:
package com.duanlian.interfacecallbackdemo1;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.duanlian.interfacecallbackdemo1.fragment.FragmentA;
import com.duanlian.interfacecallbackdemo1.fragment.FragmentB;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;
public class MainActivity extends FragmentActivity {
String TAG = "duanlian-------";
FragmentA fragmentA;
FragmentB fragmentB;
static DataChange dataChange;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentA = new FragmentA();
fragmentB = new FragmentB();
}
public void setData(DataChange dataChange) {
this.dataChange = dataChange;
}
/**
* 創建一個接口
*/
public interface DataChange {
void setDataChange(String qqq);
}
public void button(View view) {
switch (view.getId()) {
case R.id.button1:
changeFragment(fragmentA);
getData("http://mobile.ximalaya.com/mobile/v1/album?albumId=2839012");
break;
case R.id.button2:
changeFragment(fragmentB);
getData("http://mobile.ximalaya.com/mobile/v1/album?albumId=2839015");
break;
default:
break;
}
}
private void getData(String path) {
HttpUtils utils = new HttpUtils();
utils.send(HttpRequest.HttpMethod.GET, path, new RequestCallBack() {
@Override
public void onSuccess(ResponseInfo responseInfo) {
//拿到請求到的數據
String result = responseInfo.result;
//調用接口的方法把數據傳遞進去
if (dataChange!=null) {
dataChange.setDataChange(result);
}
}
@Override
public void onFailure(HttpException e, String s) {
Toast.makeText(MainActivity.this, "請求數據失敗"+s, Toast.LENGTH_SHORT).show();
}
});
}
/**
* 用來讓Fragment替換framelayout的方法
*
* @param fragment
*/
private void changeFragment(Fragment fragment) {
getSupportFragmentManager().beginTransaction().replace(R.id.main_frameLayout, fragment).commit();
}
}
<framelayout android:id="@+id/main_frameLayout" android:layout_height="0dp" android:layout_weight="1" android:layout_width="match_parent"> </framelayout>
package com.duanlian.interfacecallbackdemo1.fragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.duanlian.interfacecallbackdemo1.MainActivity;
import com.duanlian.interfacecallbackdemo1.R;
public class FragmentA extends Fragment {
private TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_a, null);
textView = (TextView) view.findViewById(R.id.fragmemt_a_textview);
//拿到MainActivity的對象,調用它裡面的方法
MainActivity activity = new MainActivity();
activity.setData(new MainActivity.DataChange() {
@Override
public void setDataChange(String aaa) {
textView.setText(aaa);
}
});
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
}
package com.duanlian.interfacecallbackdemo1.fragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.duanlian.interfacecallbackdemo1.MainActivity;
import com.duanlian.interfacecallbackdemo1.R;
public class FragmentB extends Fragment implements MainActivity.DataChange{
private TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_b, null);
textView = (TextView) view.findViewById(R.id.fragmemt_b_textview);
//實現接口的方式調用mainActivity的方法
((MainActivity)getActivity()).setData(this);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
/**
* 實現接口之後必須實現接口裡的抽象方法
* @param qqq
*/
@Override
public void setDataChange(String qqq) {
textView.setText(qqq);
}
}

Android 上傳頭像(文件)到服務器
現在很多app都用到了頭像的功能,我的項目中也用到了。頭像上傳分幾步:1.獲取頭像2.剪裁頭像3.文件上傳4.服務器的接受保存首先第一步,無非就是兩種方式1,拍照2,相冊
Android自定義ViewGroup之實現FlowLayout流式布局
整理總結自鴻洋的博客:http://blog.csdn.net/lmj623565791/article/details/38352503/ 一、FlowLay
Android網絡之HttpUrlConnection和Socket關系解析
多年以前Android的網絡請求只有Apache開源的HttpClient和JDK的HttpUrlConnection,近幾年隨著OkHttp的流行Android在高版本
Android系統中添加一個產品----圖文詳解
本文本著開源的精神介紹如何向一個Android系統中添加一個產品的整個過程,按照以下過程筆者有理由相信每個將要從事本行業的人都可以完成,其實添加一個產品並不難,難的是對其