2012-08-27 6 views
0

저는 Android 개발을 처음 사용하고 있으며 두 개의 탭이 포함 된 응용 프로그램을 만들었습니다. 한 탭에서 이미지가 포함 된 그리드가 표시되고 다른 페이지에 표시됩니다. 3 개의 XML 레이아웃 파일과 3 개의 Java 클래스 파일을 작성했습니다. 코드는 아래에 있습니다.탭 응용 프로그램 런타임 중 오류가 발생했습니다.

MainActivity.java

public class MainActivity extends TabActivity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    TabHost tabhost = getTabHost(); 

    TabSpec imgspec = tabhost.newTabSpec("Images"); 
    imgspec.setIndicator("Images"); 
    Intent imgIntent = new Intent(this,ImageAdapter.class); 
    imgspec.setContent(imgIntent); 

    TabSpec pagespec = tabhost.newTabSpec("NewPage"); 
    pagespec.setIndicator("New Page"); 
    Intent pageIntent = new Intent(this,pageActivity.class); 
    pagespec.setContent(pageIntent); 

    tabhost.addTab(imgspec); 
    tabhost.addTab(pagespec); 
} 

} 

ImageAdapter.java

public class ImageAdapter extends BaseAdapter { 
Context mContext; 

public Integer[] mThumbIds = {R.drawable.ic_action_search , R.drawable.ic_launcher , R.drawable.img1 }; 

public ImageAdapter(Context c) { 
    mContext = c; 
} 

public int getCount(){ 
    return mThumbIds.length ; 
} 

public Object getItem(int position){ 

    return mThumbIds[position]; 
} 

public View getView(int position , View convertView , ViewGroup parent){ 
    ImageView imageView = new ImageView(mContext); 
     imageView.setImageResource(mThumbIds[position]); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setLayoutParams(new GridView.LayoutParams(70, 70)); 
     return imageView; 


} 

@Override 
public long getItemId(int arg0) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

} 

pageActivity.java

public class pageActivity extends Activity { 

}  

activity_main (I 나중에 pageActivity.java에 대한 코드를 작성 할 수 있습니다) .xml

<?xml version="1.0" encoding="utf-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/tabhost" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

    <TabWidget 
     android:id="@android:id/tabs" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 

    <FrameLayout 
     android:id="@android:id/tabcontent" 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent"/> 

    </LinearLayout> 

</TabHost> 

img_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 


</GridView> 

page_layout.xml 런타임시

<?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" > 


</LinearLayout> 

, 응용 프로그램이 충돌합니다. LogCat을 살펴본 후 ImageAdapter.java 파일에 문제가있는 것으로 보입니다. 도와주세요 .

로그 캣 오류 당신은 ImageAdapter와 탭 중 하나를 설정하려고

08-27 19:16:14.772: E/AndroidRuntime(390): FATAL EXCEPTION: main 
08-27 19:16:14.772: E/AndroidRuntime(390): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.prac1/com.example.prac1.MainActivity}: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.prac1/com.example.prac1.ImageAdapter}: java.lang.InstantiationException: com.example.prac1.ImageAdapter 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.os.Looper.loop(Looper.java:130) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.app.ActivityThread.main(ActivityThread.java:3683) 
08-27 19:16:14.772: E/AndroidRuntime(390): at java.lang.reflect.Method.invokeNative(Native Method) 
08-27 19:16:14.772: E/AndroidRuntime(390): at java.lang.reflect.Method.invoke(Method.java:507) 
08-27 19:16:14.772: E/AndroidRuntime(390): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
08-27 19:16:14.772: E/AndroidRuntime(390): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
08-27 19:16:14.772: E/AndroidRuntime(390): at dalvik.system.NativeStart.main(Native Method) 
08-27 19:16:14.772: E/AndroidRuntime(390): Caused by: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.prac1/com.example.prac1.ImageAdapter}: java.lang.InstantiationException: com.example.prac1.ImageAdapter 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.app.ActivityThread.startActivityNow(ActivityThread.java:1487) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.widget.TabHost.setCurrentTab(TabHost.java:326) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.widget.TabHost.addTab(TabHost.java:216) 
08-27 19:16:14.772: E/AndroidRuntime(390): at com.example.prac1.MainActivity.onCreate(MainActivity.java:32) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
08-27 19:16:14.772: E/AndroidRuntime(390): ... 11 more 
08-27 19:16:14.772: E/AndroidRuntime(390): Caused by: java.lang.InstantiationException: com.example.prac1.ImageAdapter 
08-27 19:16:14.772: E/AndroidRuntime(390): at java.lang.Class.newInstanceImpl(Native Method) 
08-27 19:16:14.772: E/AndroidRuntime(390): at java.lang.Class.newInstance(Class.java:1409) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
08-27 19:16:14.772: E/AndroidRuntime(390): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561) 
08-27 19:16:14.772: E/AndroidRuntime(390): ... 20 more 
+2

포스트 로그 캣 오류 PLZ – petey

+0

또한 로그 캣을 게시하시기 바랍니다. – Shrikant

+0

TabActivity에 대한 비추천 경고가 나타 났습니까? ActionBarSherlock에서 읽으십시오. –

답변

0

귀하의 문제가 ImageAdapterActivity 아니므로 안드로이드가 한 것처럼 인스턴스화하는 방법을 모르고는이 없다는 것입니다 아래의 코드를 제거합니다.

ImageAdapter을 보유하고 ActivityGridView에 어댑터를 설정하면 Activity을 만들어야합니다. 이것에

첫째, 변화 img_layout.xml :

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/img_grid" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

이의 새 활동 ImageGridActivity를 부르 자. 내 ImageGridActivity.onCreate() 당신이 할 수 있습니다 :

setContentView(R.id.img_layout); 
GridView grid = (GridView)findViewById(R.id.img_grid); 
grid.setAdapter(new ImageAdapter(this)); 
+0

내가 말한 것처럼 내 img_layout.xml 파일을 변경했습니다. 나는 Activity 클래스를 확장하고 onCreate() 메서드에서 코드를 추가 한 ImageGridActivity라는 새로운 활동 클래스를 만들었습니다. 그것은 여전히 ​​충돌하고 있습니다. – UselessNoob

+0

당신이 그들을 제거하지 않을 것임을 제외하고 당신은 또한 지적 된 @ nandeesh 라인을 바꿀 필요가있다. 'ImageAdapter.class'를'ImageGridActivity.class'로 대체 할 것입니다. 그 후에도 여전히 충돌이 발생하면 logcat 출력이 동일합니까? –

+0

시간 내 주셔서 감사합니다. 지금 실행 중입니다. – UselessNoob

0

아래에 표시되어 있지만, ImageAdapterActivity 없습니다. 활동 클래스는 탭으로 만 설정할 수 있습니다. 그래서

Intent imgIntent = new Intent(this,ImageAdapter.class); 
imgspec.setContent(imgIntent); 
+0

(두 줄 이상의 코드를 제거한 후) 작업을 수행하기 위해 어떤 변경을해야합니까?를 확인하십시오. – UselessNoob

+0

시간과 편집에 많은 감사를드립니다. 지금 실행 중입니다. – UselessNoob

관련 문제