安卓:Fragment向Fragment傳值的3種方法
阿新 • • 發佈:2019-01-26
第一種:
主佈局檔案:
第一個Fragment的佈局檔案<span style="font-size:18px;"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <fragment android:id="@+id/fg1" android:name="mars.day12_fragmenttofragment.Fragment1" android:layout_height="match_parent" android:layout_weight="1" android:layout_width="0dp"/> <LinearLayout android:id="@+id/fg2" android:layout_height="match_parent" android:layout_weight="1" android:layout_width="0dp" android:orientation="horizontal"> </LinearLayout> </LinearLayout> </span>
第2個Fragment的佈局檔案<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#00ff00" android:gravity="center"> <EditText android:id="@+id/et" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="30sp"/> <Button android:id="@+id/bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="傳送" android:textSize="30sp"/> </LinearLayout> </span>
第1個Fragment的邏輯程式碼檔案<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#0000ff" android:gravity="center"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="30sp" android:text="接收的內容:"/> <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="30sp"/> </LinearLayout> </span>
<span style="font-size:18px;">package mars.day12_fragmenttofragment;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
@SuppressLint("NewApi") public class Fragment1 extends Fragment{
EditText et;
CallBack call;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
call=(CallBack) getActivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment1,container,false);
et=(EditText) view.findViewById(R.id.et);
Button bt=(Button) view.findViewById(R.id.bt);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
call.getData(et.getText().toString());
}
});
return view;
}
public interface CallBack
{
public void getData(String data);
}
}
</span>
主邏輯程式碼檔案:
<span style="font-size:18px;">package mars.day12_fragmenttofragment;
import mars.day12_fragmenttofragment.Fragment1.CallBack;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.view.Menu;
public class MainActivity extends Activity implements CallBack{
FragmentManager fm;
@SuppressLint("NewApi") @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fm=getFragmentManager();
FragmentTransaction shiwu = fm.beginTransaction();
shiwu.replace(R.id.fg2,new Fragment2());
shiwu.commit();
}
@SuppressLint("NewApi") @Override
public void getData(String data) {
Fragment2 fg2=new Fragment2();
Bundle bundle=new Bundle();
bundle.putString("mes",data);
fg2.setArguments(bundle);
FragmentTransaction shiwu = fm.beginTransaction();
shiwu.replace(R.id.fg2,fg2);
shiwu.commit();
}
}
</span>
第二個Fragment的邏輯程式碼檔案
<span style="font-size:18px;">package mars.day12_fragmenttofragment;
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
@SuppressLint("NewApi") public class Fragment2 extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment2,container,false);
TextView tv=(TextView) view.findViewById(R.id.tv);
Bundle bundle=getArguments();
//判斷需寫
if(bundle!=null)
{
tv.setText(bundle.getString("mes"));
}
return view;
}
}
</span>
第二種和第三種方法:
Fragment對應的佈局檔案兩個都同上
主佈局檔案
<span style="font-size:18px;"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<fragment
android:id="@+id/fg1"
android:name="mars.day12_fragmenttofragment.Fragment1"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_width="0dp"/>
<LinearLayout
android:id="@+id/fg2"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_width="0dp"
android:orientation="horizontal">
</LinearLayout>
</LinearLayout>
</span>
第一個Fragment的邏輯程式碼檔案
<span style="font-size:18px;">package mars.method2and3;
import mars.day12_fragmenttofragment.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
@SuppressLint("NewApi") public class Fragment1 extends Fragment{
EditText et;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment1,container,false);
et=(EditText) view.findViewById(R.id.et);
Button bt=(Button) view.findViewById(R.id.bt);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String data=et.getText().toString();
//第二種方法
// Fragment2 fg2=(Fragment2) getFragmentManager().findFragmentById(R.id.fg2);
// fg2.setData(data);
//第三種方法
TextView tv=(TextView) getActivity().findViewById(R.id.tv);
tv.setText(data);
}
});
return view;
}
}</span>
第2個Fragment的邏輯程式碼檔案
<span style="font-size:18px;">package mars.method2and3;
import mars.day12_fragmenttofragment.R;
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
@SuppressLint("NewApi") public class Fragment2 extends Fragment{
TextView tv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment2,container,false);
tv=(TextView) view.findViewById(R.id.tv);
return view;
}
public void setData(String str)
{
tv.setText(str);
}
}
</span>