2013-11-25 3 views
1

Я пытаюсь создать ListView внутри вкладки ActionBar и не могу найти подходящее учебное пособие, которое может помочь мне создать это.Создание ListView внутри фрагмента вкладки ActionBar

Любые санкции?

Большая часть кода уже вырваны из учебников, но это приводит к следующей ошибке:

11-25 12:44:29.875: D/libEGL(20751): loaded /system/lib/egl/libEGL_mali.so 
11-25 12:44:29.885: D/libEGL(20751): loaded /system/lib/egl/libGLESv1_CM_mali.so 
11-25 12:44:29.890: D/libEGL(20751): loaded /system/lib/egl/libGLESv2_mali.so 
11-25 12:44:29.895: D/(20751): Device driver API match 
11-25 12:44:29.895: D/(20751): Device driver API version: 10 
11-25 12:44:29.895: D/(20751): User space API version: 10 
11-25 12:44:29.895: D/(20751): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Tue Oct 16 15:37:13 KST 2012 
11-25 12:44:29.930: D/OpenGLRenderer(20751): Enabling debug mode 0 
11-25 12:44:30.045: D/AndroidRuntime(20751): Shutting down VM 
11-25 12:44:30.045: W/dalvikvm(20751): threadid=1: thread exiting with uncaught exception (group=0x414fe2a0) 
11-25 12:44:51.650: D/libEGL(21151): loaded /system/lib/egl/libEGL_mali.so 
11-25 12:44:51.660: D/libEGL(21151): loaded /system/lib/egl/libGLESv1_CM_mali.so 
11-25 12:44:51.665: D/libEGL(21151): loaded /system/lib/egl/libGLESv2_mali.so 
11-25 12:44:51.665: D/(21151): Device driver API match 
11-25 12:44:51.665: D/(21151): Device driver API version: 10 
11-25 12:44:51.665: D/(21151): User space API version: 10 
11-25 12:44:51.665: D/(21151): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Tue Oct 16 15:37:13 KST 2012 
11-25 12:44:51.695: D/OpenGLRenderer(21151): Enabling debug mode 0 
11-25 12:44:51.865: D/AndroidRuntime(21151): Shutting down VM 
11-25 12:44:51.865: W/dalvikvm(21151): threadid=1: thread exiting with uncaught exception (group=0x414fe2a0) 
11-25 12:44:51.880: E/AndroidRuntime(21151): FATAL EXCEPTION: main 
11-25 12:44:51.880: E/AndroidRuntime(21151): java.lang.RuntimeException: Unable to start activity ComponentInfo{rtd.nightoutin.stellenbosch/rtd.nightoutin.stellenbosch.MainActivity}: java.lang.NullPointerException 
11-25 12:44:51.880: E/AndroidRuntime(21151): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100) 
11-25 12:44:51.880: E/AndroidRuntime(21151): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125) 
11-25 12:44:51.880: E/AndroidRuntime(21151): at android.app.ActivityThread.access$600(ActivityThread.java:140) 
11-25 12:44:51.880: E/AndroidRuntime(21151): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227) 
11-25 12:44:51.880: E/AndroidRuntime(21151): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-25 12:44:51.880: E/AndroidRuntime(21151): at android.os.Looper.loop(Looper.java:137) 
11-25 12:44:51.880: E/AndroidRuntime(21151): at android.app.ActivityThread.main(ActivityThread.java:4898) 
11-25 12:44:51.880: E/AndroidRuntime(21151): at java.lang.reflect.Method.invokeNative(Native Method) 
11-25 12:44:51.880: E/AndroidRuntime(21151): at java.lang.reflect.Method.invoke(Method.java:511) 
11-25 12:44:51.880: E/AndroidRuntime(21151): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
11-25 12:44:51.880: E/AndroidRuntime(21151): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
11-25 12:44:51.880: E/AndroidRuntime(21151): at dalvik.system.NativeStart.main(Native Method) 
11-25 12:44:51.880: E/AndroidRuntime(21151): Caused by: java.lang.NullPointerException 
11-25 12:44:51.880: E/AndroidRuntime(21151): at rtd.nightoutin.stellenbosch.MainActivity.onCreate(MainActivity.java:79) 
11-25 12:44:51.880: E/AndroidRuntime(21151): at android.app.Activity.performCreate(Activity.java:5206) 
11-25 12:44:51.880: E/AndroidRuntime(21151): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083) 
11-25 12:44:51.880: E/AndroidRuntime(21151): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064) 
11-25 12:44:51.880: E/AndroidRuntime(21151): ... 11 more 
11-25 12:44:51.905: D/dalvikvm(21151): GC_CONCURRENT freed 135K, 9% free 12408K/13511K, paused 3ms+2ms, total 23ms 

У меня есть отдельные классы для вкладок, которая проходит фрагмент.

Вкладки работают на 100%, только когда я пытаюсь добавить ArrayAdapter и ListView, когда он дает мне эту ошибку.

Это то, что у меня есть до сих пор.

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.app.ActionBar.TabListener; 
import android.app.FragmentTransaction; 
import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.ViewPager; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class MainActivity extends FragmentActivity implements TabListener{ 

    private ViewPager viewPager; 
    private ActionBar actionBar; 
    private TabsPagerAdapter mAdapter; 

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

     viewPager = (ViewPager) findViewById(R.id.pager); 
     actionBar = getActionBar(); 
     mAdapter = new TabsPagerAdapter(getSupportFragmentManager()); 

     viewPager.setAdapter(mAdapter); 
     actionBar.setDisplayShowTitleEnabled(false); 
     actionBar.setDisplayShowHomeEnabled(false); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     actionBar.addTab(actionBar.newTab() 
       .setTabListener(this).setIcon(R.drawable.ic_tab_calendar)); 
     actionBar.addTab(actionBar.newTab() 
         .setTabListener(this).setIcon(R.drawable.ic_tab_favourite)); 
     actionBar.addTab(actionBar.newTab() 
       .setTabListener(this).setIcon(R.drawable.ic_tab_venue)); 

     viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int position) { 
       // on changing the page 
       // make respected tab selected 
       actionBar.setSelectedNavigationItem(position); 
      } 

      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) { 
      } 

      @Override 
      public void onPageScrollStateChanged(int arg0) { 
      } 
     }); 

     final ListView listview = (ListView) findViewById(R.id.listView_event_by_day); 
     String[] values = new String[] { "Android", "iPhone", "WindowsMobile", 
      "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", 
      "Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", 
      "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2", 
      "Android", "iPhone", "WindowsMobile" }; 

     final ArrayList<String> list = new ArrayList<String>(); 
     for (int i = 0; i < values.length; ++i) { 
      list.add(values[i]); 
     } 
     final StableArrayAdapter adapter = new StableArrayAdapter(this, 
      android.R.layout.simple_list_item_1, list); 
     listview.setAdapter(adapter); 
    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
     viewPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 

    private class StableArrayAdapter extends ArrayAdapter<String> { 

     HashMap<String, Integer> mIdMap = new HashMap<String, Integer>(); 

     public StableArrayAdapter(Context context, int textViewResourceId, 
      List<String> objects) { 
      super(context, textViewResourceId, objects); 
      for (int i = 0; i < objects.size(); ++i) { 
      mIdMap.put(objects.get(i), i); 
      } 
     } 

     @Override 
     public long getItemId(int position) { 
      String item = getItem(position); 
      return mIdMap.get(item); 
     } 

     @Override 
     public boolean hasStableIds() { 
      return true; 
     } 

     } 

} 

Любые рекомендации или руководства будут с благодарностью оценены.

+0

что номер строки ** 79 ** в 'MainActivity'. – Hariharan

+0

Линия 79 - это listview.setAdapter (адаптер); – gvhuyssteen

+0

- это то, что 'listView_event_by_day' listview в' activity_main' – Hariharan

ответ

1

Попробуйте, как это ..

View view; 
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    view = inflater.inflate(R.layout.fragment_event_by_day, null); 


final ListView listview = (ListView) view.findViewById(R.id.listView_event_by_day); 
     String[] values = new String[] { "Android", "iPhone", "WindowsMobile", 
      "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", 
      "Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", 
      "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2", 
      "Android", "iPhone", "WindowsMobile" }; 

     final ArrayList<String> list = new ArrayList<String>(); 
     for (int i = 0; i < values.length; ++i) { 
      list.add(values[i]); 
     } 
     final StableArrayAdapter adapter = new StableArrayAdapter(this, 
      android.R.layout.simple_list_item_1, list); 
     listview.setAdapter(adapter); 
+0

Спасибо, я больше не получаю никаких ошибок, но на вкладке ничего не отображается. Я изменил getContext() на getBaseContext(), поскольку он не был определен. Это потому, что StableAdapter ничего не пишет в макете? – gvhuyssteen

+1

@gvhuyssteen попробуйте этот пример. http://sunil-android.blogspot.in/2013/08/actionbar-tab-listfragment-in-android.html – Hariharan

+0

Хорошо, отлично! Большое спасибо за Вашу помощь. – gvhuyssteen

Смежные вопросы