2012-08-03 4 views
3

좋아, 여기에 문제가 있는데, 하나의 조각 활동 안에 조각이 두 개 있습니다. 하나는 ListFragment이고 다른 하나는 Fragment입니다. 그래서, 어떤 항목이 선택되었는지에 따라 Fragment를 표시하고 싶습니다. 여기에 문제가있다. 가로 모드 또는 세로 모드에서이 조각 활동을 시작하면 올바르게 작동합니다. 어쨌든, 내가 다른 방향으로 바뀌면 언제나 추락했다. 오류는 inflator에 관한 것입니다. onCreateView와 같지만 다른 게시물을 보았습니다. onConfigurationChanges, onSaveInstances 등 다른 해결 방법은 이름에서 클래스로 변경되지 않았습니다. 모두 동일한 오류가 있습니다. 그래서, 나는 누군가가 나를 돕기를 바랍니다. 나는 레이아웃 - 토지와 레이아웃을 가지고 있지만 여전히 작동하지 않습니다.조각 오리 엔테이션 오리 엔테이션 오리 엔테이션

여기 내 코드가 있습니다.

activity_pontix (토지와 세로 모드 모두)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#CCFF99" 
    android:orientation="vertical" > 

    <TextView android:id="@+id/Pontix" 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:gravity="center_horizontal" 
     android:text="@string/pontix" 
     android:background="#ffffff" 
     android:textColor="#000000" 
     android:textSize="40dp" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" > 

     <fragment 
      android:id="@+id/sideMenu" 
      android:name="com.example.pontix.SideMenu" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="3" /> 

     <fragment 
      android:id="@+id/content" 
      android:name="com.example.pontix.ContentPreview" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" /> 
    </LinearLayout> 

</LinearLayout> 

SideMenu.java

public class SideMenu extends ListFragment 
{ 
    OnMenuSelectedListener setSelected; 

    public interface OnMenuSelectedListener 
    { 
     public void onItemSelected(int position); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     int layout = R.layout.side_menu_item; 

     setListAdapter(new ArrayAdapter<String>(getActivity(), layout, MenuItem.Items)); 
    } 

    @Override 
    public void onStart() 
    { 
     super.onStart(); 

     if (getFragmentManager().findFragmentById(R.id.sideMenu) != null) { 
       getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
      } 
    } 

    @Override 
    public void onAttach(Activity activity) 
    { 
     super.onAttach(activity); 

     try 
     { 
      setSelected = (OnMenuSelectedListener) activity; 
     } 
     catch (ClassCastException e) 
     { 
      throw new ClassCastException(activity.toString() + " must implement OnMenuSelectedListener"); 
     } 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) 
    { 
     setSelected.onItemSelected(position); 

     // Set the item as checked to be highlighted when in two-pane layout 
     getListView().setItemChecked(position, true); 
    } 
} 

ContentPreview.java

public class ContentPreview extends Fragment 
{ 
    final static String ARG_POSITION = "position"; 
    int mCurrentPosition = -1; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     if (savedInstanceState != null) 
     { 
      mCurrentPosition = savedInstanceState.getInt(ARG_POSITION); 
     } 

     return inflater.inflate(R.layout.content_view, container, false); 
    } 

    @Override 
    public void onStart() 
    { 
     super.onStart(); 

     Bundle args = getArguments(); 
     if (args != null) 
     { 
      updateContentPreview(args.getInt(ARG_POSITION)); 
     } 
     else if (mCurrentPosition != -1) 
     { 
      updateContentPreview(mCurrentPosition); 
     } 
    } 

    public void updateContentPreview(int position) 
    { 
     switch(position) 
     { 
      case 1: 
      { 
       TextView article = (TextView) getActivity().findViewById(R.id.contentView); 
       article.setText("Voce estava na aba Gincana"); 
       mCurrentPosition = position; 
       break; 
      } 
      case 2: 
      { 
       TextView article = (TextView) getActivity().findViewById(R.id.contentView); 
       article.setText("Voce estava na aba Tarefas"); 
       mCurrentPosition = position; 
       break; 
      } 
      case 3: 
      { 
       TextView article = (TextView) getActivity().findViewById(R.id.contentView); 
       article.setText("Voce estava na aba Ranking"); 
       mCurrentPosition = position; 
       break; 
      } 
      case 4: 
      { 
       TextView article = (TextView) getActivity().findViewById(R.id.contentView); 
       article.setText("Voce estava na aba Amigos"); 
       mCurrentPosition = position; 
       break; 
      } 
      case 5: 
      { 
       TextView article = (TextView) getActivity().findViewById(R.id.contentView); 
       article.setText("Voce estava na aba Perfil"); 
       mCurrentPosition = position; 
       break; 
      } 
      case 6: 
      { 
       TextView article = (TextView) getActivity().findViewById(R.id.contentView); 
       article.setText("Voce estava na aba Sobre"); 
       mCurrentPosition = position; 
       break; 
      } 
     } 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) 
    { 
     super.onSaveInstanceState(outState); 

     outState.putInt(ARG_POSITION, mCurrentPosition); 
    } 
} 

PontixActivity.java

public class PontixActivity extends FragmentActivity implements SideMenu.OnMenuSelectedListener 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_pontix); 

     Intent intent = getIntent(); 
     int code = intent.getIntExtra(GincanaActivity.EXTRA_CONTENT,0); 

     SideMenu sideMenu = new SideMenu(); 

     sideMenu.setArguments(getIntent().getExtras()); 

     getSupportFragmentManager().beginTransaction().add(R.id.sideMenu, sideMenu).commit(); 

     ContentPreview contentFragment = (ContentPreview) getSupportFragmentManager().findFragmentById(R.id.content); 

     if (contentFragment != null) 
     { 
      contentFragment.updateContentPreview(code); 

     } 
    } 

    public void onItemSelected(int position) 
    { 
     switch(position) 
     { 
      case 0: 
      { 
       Intent contentView = new Intent(this, GincanaActivity.class); 
       startActivity(contentView); 
       break; 
      } 
      case 1: 
      { 
       Intent contentView = new Intent(this, TarefaActivity.class); 
       startActivity(contentView); 
       break; 
      } 
      case 2: 
      { 
       Intent contentView = new Intent(this, RankingActivity.class); 
       startActivity(contentView); 
       break; 
      } 
      case 3: 
      { 
       Intent contentView = new Intent(this, MainActivity.class); 
       startActivity(contentView); 
       break; 
      } 
      case 4: 
      { 
       Intent contentView = new Intent(this, MainActivity.class); 
       startActivity(contentView); 
       break; 
      } 
      case 5: 
      { 
       Intent contentView = new Intent(this, MainActivity.class); 
       startActivity(contentView); 
       break; 
      } 
     } 
    } 
} 

다음은 오류 로그입니다.

08-03 13:13:58.745: W/IInputConnectionWrapper(13847): showStatusIcon on inactive InputConnection 
08-03 13:14:09.065: D/AbsListView(13847): Get MotionRecognitionManager 
08-03 13:14:09.065: D/AbsListView(13847): Get MotionRecognitionManager 
08-03 13:14:12.310: D/AndroidRuntime(13847): Shutting down VM 
08-03 13:14:12.310: W/dalvikvm(13847): threadid=1: thread exiting with uncaught exception (group=0x40c661f8) 
08-03 13:14:12.340: E/AndroidRuntime(13847): FATAL EXCEPTION: main 
08-03 13:14:12.340: E/AndroidRuntime(13847): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.pontix/com.example.pontix.PontixActivity}: android.view.InflateException: Binary XML file line #21: Error inflating class fragment 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3365) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.app.ActivityThread.access$700(ActivityThread.java:128) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1165) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.os.Looper.loop(Looper.java:137) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.app.ActivityThread.main(ActivityThread.java:4514) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at java.lang.reflect.Method.invokeNative(Native Method) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at java.lang.reflect.Method.invoke(Method.java:511) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at dalvik.system.NativeStart.main(Native Method) 
08-03 13:14:12.340: E/AndroidRuntime(13847): Caused by: android.view.InflateException: Binary XML file line #21: Error inflating class fragment 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:280) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.app.Activity.setContentView(Activity.java:1892) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at com.example.pontix.PontixActivity.onCreate(PontixActivity.java:13) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.app.Activity.performCreate(Activity.java:4562) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934) 
08-03 13:14:12.340: E/AndroidRuntime(13847): ... 12 more 
08-03 13:14:12.340: E/AndroidRuntime(13847): Caused by: java.lang.IllegalStateException: Fragment com.example.pontix.SideMenu did not create a view. 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:295) 
08-03 13:14:12.340: E/AndroidRuntime(13847): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669) 
08-03 13:14:12.340: E/AndroidRuntime(13847): ... 23 more 
08-03 13:14:12.355: D/dalvikvm(13847): GC_CONCURRENT freed 152K, 3% free 13194K/13575K, paused 1ms+3ms 
08-03 13:14:12.355: D/AbsListView(13847): [unregisterDoubleTapMotionListener] 
08-03 13:14:12.355: I/MotionRecognitionManager(13847): .unregisterListener :/listener count = 0->0, [email protected] 
08-03 13:14:12.355: D/AbsListView(13847): [unregisterDoubleTapMotionListener] 
08-03 13:14:12.355: I/MotionRecognitionManager(13847): .unregisterListener :/listener count = 0->0, [email protected] 
08-03 13:14:12.360: D/AbsListView(13847): [unregisterDoubleTapMotionListener] 
08-03 13:14:12.360: I/MotionRecognitionManager(13847): .unregisterListener :/listener count = 0->0, [email protected] 

답변

1

당신의 조각 모두가 공공 빈 생성자가 필요합니다

public class SideMenu extends ListFragment 
{ 
    public SideMenu(){} 
    ... 

public class ContentPreview extends Fragment 
{ 
    public ContentPreview(){} 
    ... 
+0

아직도 생성자와 충돌은 ... 사람은 왜 아는 사람? –

+1

프로그래밍 방식으로 생성 된 조각과 조각을 XML로 정의하여 혼합하고 있습니다. 이는 재앙의 방법입니다. XML 요소를 으로 대체하고 모든 것을 프로그래밍 방식으로 (선호) 수행하거나 XML로 모두 수행하고 PontixActivity에서 조각 인스턴스화/트랜잭션을 제거하십시오. –

+0

@ Error454로 고쳐 주셨습니다. 감사합니다! 레이아웃에서 단편 참조를 대체하고 코드에서 단편을 교환하는 것. –

관련 문제