2013-01-18 2 views
1

조각이있는 탭을 구현하는 코드를 발견했습니다. 조각에 listview를 넣으려고했지만 응용 프로그램이 다음 오류로 인해 충돌합니다. 코드를보고 나를 안내 해주십시오. 고맙습니다.조각 탭에서 목록보기를 삽입 한 후 응용 프로그램이 깨졌습니다.

01-18 11:44:49.130: E/AndroidRuntime(1908): FATAL EXCEPTION: main 
01-18 11:44:49.130: E/AndroidRuntime(1908): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.abe/com.example.abe.TabsFragmentActivity}: java.lang.NullPointerException 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.os.Looper.loop(Looper.java:137) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at dalvik.system.NativeStart.main(Native Method) 
01-18 11:44:49.130: E/AndroidRuntime(1908): Caused by: java.lang.NullPointerException 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at com.example.abe.Tab1Fragment.onCreateView(Tab1Fragment.java:44) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1861) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.app.Activity.performStart(Activity.java:5018) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2032) 
01-18 11:44:49.130: E/AndroidRuntime(1908):  ... 11 more 

TABFRAGMENTACTIVITY 클래스 : -

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#FF0000" 
> 

<ListView 
    android:id="@+id/listView1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" > 
</ListView> 

</LinearLayout> 
: 이것은 tabfragment 클래스의 XML이

import android.annotation.TargetApi; 
import android.os.Build; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.ListFragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.LinearLayout; 
import android.widget.ListView; 
public class Tab1Fragment extends ListFragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     ListView lv = (ListView)getView().findViewById(R.id.listView1); 
     String android_array1[] = new String[50]; 
     for(int i=0;i<50;i++) 
     { 
      android_array1[i]="ab"+i; 
     } 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity().getBaseContext(), android.R.layout.simple_list_item_1, android_array1); 
     lv.setAdapter(adapter);      
     return (LinearLayout)inflater.inflate(R.layout.tab_frag1_layout, container, false); 
    } 
} 

입니다

import java.util.HashMap; 
import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTransaction; 
import android.view.View; 
import android.widget.TabHost; 
import android.widget.TabHost.TabContentFactory; 
public class TabsFragmentActivity extends FragmentActivity implements TabHost.OnTabChangeListener { 

    private TabHost mTabHost; 
    private HashMap<String, TabInfo> mapTabInfo = new HashMap<String, TabsFragmentActivity.TabInfo>(); 
    private TabInfo mLastTab = null; 
    private class TabInfo { 
     private String tag; 
    private Class<?> clss; 
    private Bundle args; 
    private Fragment fragment; 
    TabInfo(String tag, Class<?> clazz, Bundle args) { 
     this.tag = tag; 
     this.clss = clazz; 
     this.args = args; 
    } 

    } 
    class TabFactory implements TabContentFactory { 

     private final Context mContext; 
    public TabFactory(Context context) 
    { 
     mContext = context; 
    } 
    public View createTabContent(String tag) 
    { 
     View v = new View(mContext); 
     v.setMinimumWidth(0); 
     v.setMinimumHeight(0); 
     return v; 
    } 

    } 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tabs_layout); 
     initialiseTabHost(savedInstanceState); 
     if (savedInstanceState != null) { 
    mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); //set the tab as per the saved state 
    } 
    } 
protected void onSaveInstanceState(Bundle outState) { 
    outState.putString("tab", mTabHost.getCurrentTabTag()); //save the tab selected 
    super.onSaveInstanceState(outState); 
} 
    private void initialiseTabHost(Bundle args) { 
     mTabHost = (TabHost)findViewById(android.R.id.tabhost); 
    mTabHost.setup(); 
    TabInfo tabInfo = null; 
    TabsFragmentActivity.addTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab1").setIndicator("Tab 1"), (tabInfo = new TabInfo("Tab1", Tab1Fragment.class, args))); 
    this.mapTabInfo.put(tabInfo.tag, tabInfo); 
    TabsFragmentActivity.addTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab2").setIndicator("Tab 2"), (tabInfo = new TabInfo("Tab2", Tab2Fragment.class, args))); 
    this.mapTabInfo.put(tabInfo.tag, tabInfo); 
    TabsFragmentActivity.addTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab3").setIndicator("Tab 3"), (tabInfo = new TabInfo("Tab3", Tab3Fragment.class, args))); 
    this.mapTabInfo.put(tabInfo.tag, tabInfo); 
    this.onTabChanged("Tab1"); 

    mTabHost.setOnTabChangedListener(this); 
    } 
    private static void addTab(TabsFragmentActivity activity, TabHost tabHost, TabHost.TabSpec tabSpec, TabInfo tabInfo) { 
     tabSpec.setContent(activity.new TabFactory(activity)); 
    String tag = tabSpec.getTag(); 
    tabInfo.fragment = activity.getSupportFragmentManager().findFragmentByTag(tag); 
    if (tabInfo.fragment != null && !tabInfo.fragment.isDetached()) { 
    FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction(); 
    ft.detach(tabInfo.fragment); 
    ft.commit(); 
    activity.getSupportFragmentManager().executePendingTransactions(); 
    } 
    tabHost.addTab(tabSpec); 
    } 
    public void onTabChanged(String tag) { 
     TabInfo newTab = this.mapTabInfo.get(tag); 
     if (mLastTab != newTab) { 
      FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction(); 
    if (mLastTab != null) { 
     if (mLastTab.fragment != null) { 
      ft.detach(mLastTab.fragment); 
     } 
    } 
    if (newTab != null) { 
     if (newTab.fragment == null) { 
     newTab.fragment = Fragment.instantiate(this, 
      newTab.clss.getName(), newTab.args); 
     ft.add(R.id.realtabcontent, newTab.fragment, newTab.tag); 
     } else { 
     ft.attach(newTab.fragment); 
     } 
    } 
    mLastTab = newTab; 
    ft.commit(); 
    this.getSupportFragmentManager().executePendingTransactions(); 
     } 
} 


} 

TABFRAGMENT 클래스는 내가 목록보기를 넣어 시도 곳이다

+0

를 참조하십시오. 감사합니다 – Vyshakh

+0

편집하십시오 내 대답 편집 –

답변

1

참고 :

당신이 당신의 Tab1FragmentListFragment을 확장하는 경우 다음 필요가 그냥 제거

ListView lv = (ListView) root.findViewById(R.id.listView1);

을 사용할 수 없습니다.

마지막으로 귀하의 onCreateView(..) 방법은 다음과 같이 자세한 내용

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     String android_array1[] = new String[50]; 
     for(int i=0;i<50;i++) 
     { 
      android_array1[i]="ab"+i; 
     } 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity().getBaseContext(), android.R.layout.simple_list_item_1, android_array1); 

     setListAdapter(adapter);   

     return super.onCreateView(inflater, container, savedInstanceState); 
    } 

누군가가 나를 도와 주 시겠어요이 링크

http://wptrafficanalyzer.in/blog/creating-navigation-tabs-using-tabhost-and-fragments-in-android/

+0

안녕하세요 Dixit, 이에 따라 변경했지만 다음과 같은 오류가 발생했습니다 : 01-18 12 : 07 : 21.481 : E/AndroidRuntime (2150) : 치명적인 예외 : 주 01-18 12 : 07 : 21.481 : E/AndroidRuntime (2150) : java.lang.RuntimeException : 활동을 시작할 수 없습니다. ComponentInfo {com.example.abe/com.example.abe.TabsFragmentActivity} : java.lang.RuntimeException : 내용에 ListView가 있어야합니다. id 속성이 'android.R.id.list'인 경우 – Vyshakh

+0

내 listview의 내 ID 이름은 listview1이므로 android.R.id.list를 어디에 두어야합니까? 도와주세요. – Vyshakh

+0

안녕 Dixit, 나는 이드에서 내 실수를 발견하고 그것을 고쳤다. 귀하의 답변에 많은 감사드립니다. 그것은 내 응용 프로그램을 실행했다. – Vyshakh

관련 문제