2012-05-25 5 views
0

두 개의 조각이 필요하다는 점에서 하나의 응용 프로그램을 만들었으므로 하나의 조각 클래스를 선언하고 그 클래스 안에 다른 정적 조각 클래스를 만들었습니다. 39 : E/AndroidRuntime (911) : ... (11) 45.264이 어플을 실행에안드로이드 2.1 : 원인 : java.lang.ClassNotFoundException : 조각

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 
    <fragment 
     android:id="@+id/titles" 
     android:layout_width="25dp" 
     android:layout_height="wrap_content" 
     class="frag.demo.DActivity$TFragment" /> 

    <fragment 
     android:id="@+id/details" 
     android:layout_width="25dp" 
     android:layout_height="wrap_content" 
     class="frag.demo.DActivity$DFragment" /> 

</FrameLayout> 

으로 main.xml에를 변경, 나는

05-25 14:39:45.224: E/AndroidRuntime(911): Uncaught handler: thread main exiting due to uncaught exception 
05-25 14:39:45.264: E/AndroidRuntime(911): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{frag.demo/frag.demo.JFragmentActivity}: java.lang.ClassNotFoundException: frag.demo.JFragmentActivity in loader [email protected] 
05-25 14:39:45.264: E/AndroidRuntime(911): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417) 
05-25 14:39:45.264: E/AndroidRuntime(911): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
05-25 14:39:45.264: E/AndroidRuntime(911): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
05-25 14:39:45.264: E/AndroidRuntime(911): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
05-25 14:39:45.264: E/AndroidRuntime(911): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-25 14:39:45.264: E/AndroidRuntime(911): at android.os.Looper.loop(Looper.java:123) 
05-25 14:39:45.264: E/AndroidRuntime(911): at android.app.ActivityThread.main(ActivityThread.java:4363) 
05-25 14:39:45.264: E/AndroidRuntime(911): at java.lang.reflect.Method.invokeNative(Native Method) 
05-25 14:39:45.264: E/AndroidRuntime(911): at java.lang.reflect.Method.invoke(Method.java:521) 
05-25 14:39:45.264: E/AndroidRuntime(911): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
05-25 14:39:45.264: E/AndroidRuntime(911): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
05-25 14:39:45.264: E/AndroidRuntime(911): at dalvik.system.NativeStart.main(Native Method) 
05-25 14:39:45.264: E/AndroidRuntime(911): Caused by: java.lang.ClassNotFoundException: frag.demo.JFragmentActivity in loader [email protected] 
05-25 14:39:45.264: E/AndroidRuntime(911): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 
05-25 14:39:45.264: E/AndroidRuntime(911): at java.lang.ClassLoader.loadClass(ClassLoader.java:573) 
05-25 14:39:45.264: E/AndroidRuntime(911): at java.lang.ClassLoader.loadClass(ClassLoader.java:532) 
05-25 14:39:45.264: E/AndroidRuntime(911): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
05-25 14:39:45.264: E/AndroidRuntime(911): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409) 

05-25 (14)과 같은 런타임 예외를 가지고 more

그리고 My JFragmentActivity 클래스는 FragmentActivity를 확장합니다. 그래서 코드가 잘못 곳

public class DActivity extends FragmentActivity {// from android.support.v4.app.*; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.i("DA","active"); 
     if (getResources().getConfiguration().orientation 
       == Configuration.ORIENTATION_LANDSCAPE) { 
      // If the screen is now in landscape mode, we can show the 
      // dialog in-line with the list so we don't need this activity. 
      finish(); 
      return; 
     } 

     if (savedInstanceState == null) { 
      // During initial setup, plug in the details fragment. 
      DFragment details = new DFragment(); 
      details.setArguments(getIntent().getExtras()); 
      getSupportFragmentManager().beginTransaction().add(android.R.id.content, details).commit(); 
     } 
    } 
    public static class TFragment extends ListFragment { 
     boolean mDualPane; 
     int mCurCheckPosition = 0; 
     String nos[]={"1","2","3","4","5"}; 
     public TFragment(){ 

     } 
     @Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
      // TODO Auto-generated method stub 
      super.onActivityCreated(savedInstanceState); 
      Log.i("TF","active"); 
      setListAdapter(new ArrayAdapter<String>(getActivity(),R.layout.simple_list,nos)); 
      View detailsFrame = getActivity().findViewById(R.id.nos); 
      mDualPane = detailsFrame != null && detailsFrame.getVisibility() == View.VISIBLE; 
      if (savedInstanceState != null) { 
       // Restore last state for checked position. 
       mCurCheckPosition = savedInstanceState.getInt("curChoice", 0); 
      } 
      if (mDualPane) { 
        // In dual-pane mode, the list view highlights the selected item. 
        getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
        // Make sure our UI is in the correct state. 
        showDetails(mCurCheckPosition); 
       } 
     } 
     @Override 
      public void onSaveInstanceState(Bundle outState) { 
       super.onSaveInstanceState(outState); 
       outState.putInt("curChoice", mCurCheckPosition); 
      } 
     @Override 
      public void onListItemClick(ListView l, View v, int position, long id) { 
       showDetails(position); 
      } 
     void showDetails(int index) { 
       mCurCheckPosition = index; 

       if (mDualPane) { 
        // We can display everything in-place with fragments, so update 
        // the list to highlight the selected item and show the data. 
        getListView().setItemChecked(index, true); 

        // Check what fragment is currently shown, replace if needed. 
        DFragment details = (DFragment) 
          getFragmentManager().findFragmentById(R.id.nos); 
        if (details == null || details.getShownIndex() != index) { 
         // Make new fragment to show this selection. 
         details = DFragment.newInstance(index); 

         // Execute a transaction, replacing any existing fragment 
         // with this one inside the frame. 
         FragmentTransaction ft = getFragmentManager().beginTransaction(); 
         ft.replace(R.id.nos, details); 
         ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
         ft.commit(); 
        } 

       } else { 
        // Otherwise we need to launch a new activity to display 
        // the dialog fragment with selected text. 
        Intent intent = new Intent(); 
        intent.setClass(getActivity(), DActivity.class); 
        intent.putExtra("index", index); 
        startActivity(intent); 
       } 
      } 


    } 
    public static class DFragment extends Fragment { 
     String names[]={"aaa","bbb","ccc","ddd","eee"}; 
     public DFragment() { 
      // TODO Auto-generated constructor stub 
     } 
    public static DFragment newInstance(int index){ 
     DFragment f= new DFragment(); 
     Bundle args=new Bundle(); 
     args.putInt("index", index); 
     f.setArguments(args); 
     return f; 
    } 
    public int getShownIndex() { 
     return getArguments().getInt("index", 0); 
    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     Log.i("DF","active"); 
     if (container == null) { 
      return null; 
     } 
     ScrollView scroller = new ScrollView(getActivity()); 
     TextView text = new TextView(getActivity()); 
     int padding = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
       4, getActivity().getResources().getDisplayMetrics()); 
     text.setPadding(padding, padding, padding, padding); 
     scroller.addView(text); 
     text.setText(names[getShownIndex()]); 
     return scroller; 
    } 

    } 
} 

내 활동 클래스 ... 저를 제공하고 두 번째 조각은 다음 첫 번째 내부에있는 경우 내 주요 활동 클래스는

public class JFragmentActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.i("main","active"); 
     setContentView(R.layout.main); 
     /*Intent i = new Intent(getApplicationContext(), DActivity.class); 
     startActivity(i);*/ 
    } 
} 

답변

0

제발 두 번째 조각의 클래스 속성은 다음과 같아야합니다.

class="frag.demo.TFragment$DFragment" 

T 행크 :)

+0

이제 두 번째 조각을 정적 함수를 사용하는 별도의 클래스로 변경했습니다. 정적 함수는 첫 번째 조각에서 사용됩니다 ... – Sridhar

+0

그래도 여전히 같은 오류가 발생합니다 – Sridhar

+0

조각 클래스는 정적 조각이 될 수 있습니까? 수업 . 이 링크에서 하나를 보았습니다. http://developer.android.com/reference/android/app/Fragment.html – Sridhar

0

매니 페스트 파일에 활동을 추가해야합니다. 예제 코드를 살펴보십시오.

+0

예, 매니 페스트 파일 – Sridhar

+0

에 내 활동을 추가했습니다. 내 새로운 대답을 확인하십시오. – xeed

0

위의 코드가 여전히 맞으면 주요 활동 JFragmentActivity는 XML을 통해 DActivity의 단편을로드하려고 시도하지만 그 단편은 DActivity에 연결되어 있기 때문에 불가능합니다. 따라서 DActivity만이이를 호출 할 수 있습니다.

귀하의 /* Intent */이 맞습니다. 파일의 FrameLayout 파일을 새 DActivity xml 파일에 적용하고 onCreate을로드 한 다음 JFragmentActivity에 인 텐트를 호출하십시오. 일부 LinearLayoutJFragmentActivity에 넣고 앱을 실행합니다.

조각의 클래스 속성이 class="frag.demo.DActivity$DFragment"

+0

05-29 10 : 42 : 09.405 : E/AndroidRuntime (304) : java.lang.NoClassDefFoundError : frag.demo.DActivity이 오류가 발생했습니다. – Sridhar

+0

및 ofc가 지연 선언에 대해 DActivity를 추가합니다. ^^ 지연 응답은 유감입니다. – xeed

2

귀하의 제목과 같아야는 2.1에이 코드를 실행하려고 시도하는 것을 의미하고, 그런 경우가 있다면, 그건 당신의 문제입니다.

Fragment 클래스는 API 레벨 11 (Android 3.0)으로 추가되었으므로 허니컴 태블릿이나 ICS 핸드셋 또는 태블릿이 없으면 실행할 수 없습니다.

+0

오른쪽 단편 클래스 허니컴 첨가하지만, 이전의 API를 지원 –

+0

@ i2v2nr20i에서 [FragmentActivity (http://developer.android.com/reference/android/support/v4/app/FragmentActivity.html) 클래스를 통해가되었음을 , 그러나 2.1에서 Fragment 클래스도 지원했습니다. – Sridhar

관련 문제