Android中在程式碼中動態(用事物)新增Fragment
效果
程式碼結構
在MainActivity中動態(用事物)新增LeftFragment和RightFragment
核心程式碼:
activity_main.xml:
<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" >
<!-- 放LeftLeftFragment的佈局 -->
<LinearLayout
android:id="@+id/left"
android:layout_weight="5"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#F5DEB3"
>
</LinearLayout>
<!-- 放RightFragment的佈局 -->
<LinearLayout
android:id="@+id/right"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#FFB6C1"
>
</LinearLayout>
</LinearLayout>
MainActivity中:
/* 本專案在在程式碼中用事務新增碎片
* 無論左邊碎片,還是右邊碎片都是用事務,並且在activity類中新增的
* 碎片是3.0以後出來的,所以支援的最低版本是3.0,
* 在主清單檔案中要改成11,低於3.0會出現異常
*/
public class MainActivity extends Activity {
private Button leftbutton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//例項化碎片物件
LeftLeftFragment fragment = new LeftLeftFragment();
// 獲得碎片管理器
FragmentManager manager = this.getFragmentManager();
// 獲得事務
FragmentTransaction transaction = manager.beginTransaction();
//把碎片新增到activity中,R.id.left指的是activity中佈局的id
transaction.add(R.id.left, fragment);
//提交
transaction.commit();
}
/*在activity的方法中寫點選事件,出現右邊介面
* 在activity中用左邊的碎片,開啟右邊的碎片
* 也可以在左邊碎片的類中開啟右邊碎片參考Android_wl_fragment_003
*/
@Override
protected void onResume() {
super.onResume();
//把碎片加到activity中後碎片中的控制元件也屬於activity
//在activity中找到左邊碎片的按鈕
this.leftbutton=(Button) findViewById(R.id.leftbutton1);
this.leftbutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//例項化右邊的碎片物件
RightFragment fragment = new RightFragment();
FragmentManager manager = MainActivity.this.getFragmentManager();
FragmentTransactiontransaction=manager.beginTransaction();
//把碎片新增到碎片中
transaction.add(R.id.right, fragment);
transaction.commit();
}
});
}
}//class
LeftLeftFragment
public class LeftLeftFragment extends Fragment {
//在碎片中至少要重寫這些方法
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// 用佈局填充器把佈局轉換成一個view物件,並返回
//只有用三個引數才能把佈局填滿
View view = inflater.inflate(R.layout.fragment_left, container, false);
return view;
}
@Override
public void onPause() {
super.onPause();
}
}
RightFragment
public class RightFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// 用佈局填充器把佈局轉換成一個view物件,並返回
//只有用三個引數才能把佈局填滿
View view = inflater.inflate(R.layout.fragment_right, container, false);
Button button=(Button) view.findViewById(R.id.rightbutton1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "右邊的碎片被點選了",5).show();
}
});
return view;
}
@Override
public void onPause() {
super.onPause();
}
}
如果沒明白下載我的例子
activity和fragment之間的資料傳遞