-2
프래그먼트 수정에 대해 많은 사람들이 질문했지만, 혼란은 프래그먼트 API의 진화하는 특성에 기반을 두거나 간단히 오해 할 수 있습니다. 이 코드를 잘라내어 프래그먼트를 사용하여 큰 화면에서 여러 레이아웃을 사용하거나 작은 화면에서 버튼을 통해 다른 레이아웃으로 이동하는 방법을 보여줍니다. 내 로그의 필수적인 부분은프래그먼트가 보이지 않는다.
<RelativeLayout 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" >
<FrameLayout
android:id="@+id/container"
android:layout_width="0px"
android:layout_height="match_parent"
tools:context="com.ruleagents.rpgsheet.MainActivity"
tools:ignore="MergeRootFrame" />
</RelativeLayout>
attribute_fragment.xml 내 activity_main.xml
12-03 21:17:29.711: E/FragmentManager(13440): No view found for id 0x7f090046
(com.ruleagents.rpgsheet:id/main_fragment) for fragment MainFragment{4053b368 #0 ....
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.ruleagents.rpgsheet/com.ruleagents.rpgsheet.SheetActivity}:
java.lang.IllegalArgumentException: No view found for id 0x7f090046
(com.ruleagents.rpgsheet:id/main_fragment) for fragment MainFragment{4053b368 #0 id=0x7f090046}
12-03 21:17:29.721: E/AndroidRuntime(13440): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1821)
내 MainActivity.java와
<?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:id="@+id/linear1">
... nested layout that works independently
</LinearLayout>
main_fragment.xml
<RelativeLayout 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="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:id="@+id/main_fragment" >
<LinearLayout
...
</LinearLayout>
<LinearLayout
...
</LinearLayout>
<LinearLayout
...
</RelativeLayout>
입니다 예 :
package com.ruleagents.rpgsheet;
import java.io.BufferedReader;
...
public class MainActivity extends FragmentActivity { //ActionBarActivity {
SectionsPagerAdapter mSectionsPagerAdapter;
FragmentManager fragmentManager; // = getFragmentManager();
AttributeFragment af = new AttributeFragment();
MainFragment mf = new MainFragment();
String characterClass, level, att1, att2, att3;
//other local variables
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_fragment);
Configuration config = getResources().getConfiguration();
af.setArguments(getIntent().getExtras());
mf.setArguments(getIntent().getExtras());
fragmentManager = getSupportFragmentManager();
if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
fragmentManager.beginTransaction().add(R.id.main_fragment, mf).commit();
fragmentManager.beginTransaction().add(R.layout.attribute_fragment, af).commit();
}else{
System.err.println("AAA creating portrait view");
fragmentManager.beginTransaction().add(R.id.container, mf).commit();
}
}
public void onMainButton(View view) {
android.support.v4.app.FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.main_fragment, mf);
ft.addToBackStack(null);
ft.commit();
}
public void onAttributesButton(View view) {
android.support.v4.app.FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.layout.attribute_fragment, af);
ft.addToBackStack(null);
ft.commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
// Unused PlaceholderFragment method ...
// unused FragmentPageAdapter ...
// local methods
}
내 MainFragment.java는
package com.ruleagents.rpgsheet;
... imports
public class MainFragment extends Fragment {
public MainFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
return inflater.inflate(R.layout.main_fragment, container, false);
}
@Override
public void onPause() {
super.onPause();
}
}
내 SheetActivity.java는
package com.ruleagents.rpgsheet;
... imports
public class SheetActivity extends ActionBarActivity {
// Local variables...
FragmentManager fragmentManager; // = getFragmentManager();
AttributeFragment af = new AttributeFragment();
MainFragment mf = new MainFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.err.println("AAA in onCreate of SheetActivity");
Configuration config = getResources().getConfiguration();
//FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
//setContentView(R.layout.activity_main);
//setContentView(R.layout.whole_sheet);
System.err.println("AAA got config");
af.setArguments(getIntent().getExtras());
mf.setArguments(getIntent().getExtras());
fragmentManager = getSupportFragmentManager();
System.err.println("AAA got frag manager");
if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
fragmentManager.beginTransaction().add(R.id.container, mf).commit();
fragmentManager.beginTransaction().add(R.id.container, af).commit();
}else{
System.err.println("AAA creating portrait view");
fragmentManager.beginTransaction().add(R.id.main_fragment, mf).commit();
}
}
public void onMainButton(View view) {
android.support.v4.app.FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.main_fragment, mf);
ft.addToBackStack(null);
ft.commit();
}
public void onSkillsButton(View view) {
android.support.v4.app.FragmentTransaction ft = fragmentManager.beginTransaction();
ft.addToBackStack(null);
ft.commit();
}
public void onAttributesButton(View view) {
android.support.v4.app.FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.layout.attribute_fragment, af);
ft.addToBackStack(null);
ft.commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
// Local methods ...
// Unused PlaceholderFragment ...
// Unused SectionsPagerAdapter
}