Rau*_*nak 34 android android-layout android-fragments
在xml布局文件中声明片段的标准方法是
<LinearLayout ...>
<fragment class="com.example.SomeFragment"
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
其中SomeFragment是一个定义的java类
class SomeFragment extends Fragment {
...
}
Run Code Online (Sandbox Code Playgroud)
可以说,我有3个片段; fragment1,fragment2和fragment3.当用户启动应用程序时,我将它们显示为fragment1,当他们点击按钮时,我将fragment1替换为fragment2等.
在单个布局xml文件中定义3个片段的最佳方法是什么?
Mat*_*man 57
您应该使用FrameLayout,这样您就不必在XML中指定片段类,这样它不仅限于一个类.
<FrameLayout
android:id="@+id/contentFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />
Run Code Online (Sandbox Code Playgroud)
而且你可以像这样在代码中设置片段
Fragment fragment = new YourFragment();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.replace(R.id.contentFragment, fragment);
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
Nis*_*ant 18
我举一个例子来在片段中切换两个布局:
首先声明一个包含两个片段的布局:(这取决于您在布局中需要多少片段)
fragment_layout_example.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1" />
<fragment
android:id="@+id/Fragment2"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
class="com.example.SecondFragment" >
<!-- Preview: layout=@layout/details -->
</fragment>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
上面的布局将显示两个片段Fragment1和Fragment2.对于Fragment1,我已经声明了容器,因为容器的内容将在运行时更改.所以没有在Fragment这里宣布这个班级.有关此检查的更多信息
http://developer.android.com/training/basics/fragments/fragment-ui.html
然后创建一个扩展的FragmentExampleActivity类Activity.如果您在向后兼容模式下使用Fragment,则扩展FragmentActivity
public class FragmentExampleActivity extends FragmentActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_layout_example);
// Check that the activity is using the layout version with
// the fragment_container FrameLayout
if (findViewById(R.id.fragment_container) != null) {
// However, if we're being restored from a previous state,
// then we don't need to do anything and should return or else
// we could end up with overlapping fragments.
if (savedInstanceState != null) {
return;
}
// Create an instance of Fragment1
Fragment1 firstFragment = new Fragment1();
// In case this activity was started with special instructions from an Intent,
// pass the Intent's extras to the fragment as arguments
firstFragment.setArguments(getIntent().getExtras());
// Add the fragment to the 'fragment_container' FrameLayout
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, firstFragment).commit();
}
}
}
Run Code Online (Sandbox Code Playgroud)
要为两个片段创建布局,请创建两个扩展的类 Fragment
public class Fagment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//set the layout you want to display in First Fragment
View view = inflater.inflate(R.layout.fragment1,
container, false);
return view;
}
}
Run Code Online (Sandbox Code Playgroud)
以同样的方式为第二个Fragment创建Fragment类并设置布局
现在,如果要在单击按钮时将Fragment1中的片段布局切换到另一个布局,则创建另一个类,例如Fragment3.java并设置要切换的布局,并在Fragment1.java中编写以下代码
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Button showFragment3=(Button)getView().findViewById(R.id.Button1);
showFragment3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
Fragment3 fragment3 = new Fragment3();
fragmentTransaction.replace(R.id.Fragment1, fragment3);
//provide the fragment ID of your first fragment which you have given in
//fragment_layout_example.xml file in place of first argument
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
});
}
Run Code Online (Sandbox Code Playgroud)
现在再次回到第一个片段,您可以单击后退按钮.但是如果你想回来点击按钮,那么在Fragment3.java中写下面的代码
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Button showFragment1 = (Button) getView().findViewById(
R.id.Button2);
showFragment1 .setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getFragmentManager().popBackStack();
}
});
}
Run Code Online (Sandbox Code Playgroud)
谢谢!希望它能帮到你......
| 归档时间: |
|
| 查看次数: |
78727 次 |
| 最近记录: |