2016-10-26 3 views
2

Zunächst einmal bin ich ein Anfänger in Android-Programmierung. Was ich versuche zu tun ist, drei Tabs mit jeweils einem ListView innerhalb zu programmieren (Sie wissen es von z. B. WhatsApp). Android Studio erleichtert das automatische Erstellen einer Aktivität mit Registerkarten. Die Frage ist also: Wie kann ich ein ListView für jedes Tab implementieren? Eigentlich gibt es ein nettes Tutorial auf http://www.androidhive.info/2012/05/android-combining-tab-layout-and-list-view/, das TabActivity verwendet. Diese Methode ist jedoch veraltet und stattdessen sollten Fragmente verwendet werden. Ich habe main_fragment.xml (das von Android Studio erstellt wurde) mit einem ListView erweitert. Aber was ist der richtige Weg, um die entsprechenden Listenadapter zu setzen und vor allem, wo sie eingestellt werden sollen? Die Einstellung wie ListView list_all = (ListView) findViewById(R.id.listViewAll) in onCreate() funktioniert nicht wegen eines Null-Objekts Referenzfehler. Auch habe ich nicht herausgefunden, wie man die rootView verwendet, die von onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) zurückgegeben wird Also, wie kann ich dieses Problem lösen?So erstellen Sie eine Aktivität mit Registerkarten mit ListViews - Android

main_fragment.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:background="@color/colorAccent" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

    <ListView 
     android:id="@+id/listViewAll" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"></ListView> 

</RelativeLayout> 

main.xml:

<?xml version="1.0" encoding="utf-8"?> 

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    android:background="@color/white" 

    tools:context="de.url.members"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="@dimen/appbar_padding_top" 
     android:background="@color/bg_login_dark" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="@color/bg_login_dark" 
      app:layout_scrollFlags="scroll|enterAlways" 
      app:popupTheme="@style/AppTheme.PopupOverlay"> 

     </android.support.v7.widget.Toolbar> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabMaxWidth="0dp" 
      app:tabGravity="fill" 
      app:tabMode="fixed" 
      android:fillViewport="false" /> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="end|bottom" 
     android:layout_margin="@dimen/fab_margin" 
     android:src="@android:drawable/ic_dialog_email" /> 

</android.support.design.widget.CoordinatorLayout> 

main.java:

public class main extends AppCompatActivity { 

    /** 
    * The {@link android.support.v4.view.PagerAdapter} that will provide 
    * fragments for each of the sections. We use a 
    * {@link FragmentPagerAdapter} derivative, which will keep every 
    * loaded fragment in memory. If this becomes too memory intensive, it 
    * may be best to switch to a 
    * {@link android.support.v4.app.FragmentStatePagerAdapter}. 
    */ 
    private SectionsPagerAdapter mSectionsPagerAdapter; 


    // The {@link ViewPager} that will host the section contents. 
    private ViewPager mViewPager; 


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


     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     // Create the adapter that will return a fragment for each of the three 
     // primary sections of the activity. 
     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

     // Set up the ViewPager with the sections adapter. 
     mViewPager = (ViewPager) findViewById(R.id.container); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(mViewPager); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
      // action here 
      } 
     }); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_members, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.logout) { 
      //action here 
     } 

     return super.onOptionsItemSelected(item); 
    } 


    /** 
    * A placeholder fragment containing a simple view. 
    */ 

    public static class PlaceholderFragment extends Fragment { 
     /** 
     * The fragment argument representing the section number for this 
     * fragment. 
     */ 
     private static final String ARG_SECTION_NUMBER = "section_number"; 

     public PlaceholderFragment() { 
     } 

     /** 
     * Returns a new instance of this fragment for the given section 
     * number. 
     */ 
     public static PlaceholderFragment newInstance(int sectionNumber) { 
      PlaceholderFragment fragment = new PlaceholderFragment(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
      fragment.setArguments(args); 
      return fragment; 
     } 

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

      int sectionNumber = getArguments().getInt(ARG_SECTION_NUMBER);//INDEX of selected TAB 
      View rootView; 

      if (sectionNumber == 1){ 
       rootView = inflater.inflate(R.layout.main_fragment, container, false); 
      }else if (sectionNumber == 2){ 
       rootView = inflater.inflate(R.layout.main_fragment, container, false);     
      }else if (sectionNumber == 3){ 
       rootView = inflater.inflate(R.layout.main_fragment, container, false);     
      }else{ 
       rootView = inflater.inflate(R.layout.main_fragment, container, false); 

      } 

      return rootView; 
     } 
    } 

    /** 
    * A {@link FragmentPagerAdapter} that returns a fragment corresponding to 
    * one of the sections/tabs/pages. 
    */ 
    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

     public SectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      // getItem is called to instantiate the fragment for the given page. 
      // Return a PlaceholderFragment (defined as a static inner class below). 
      return PlaceholderFragment.newInstance(position + 1); 
     } 

     @Override 
     public int getCount() { 
      // Show 3 total pages. 
      return 3; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      switch (position) { 
       case 0: 
        return getResources().getString(R.string.title_section1); 
       case 1: 
        return getResources().getString(R.string.title_section2); 
       case 2: 
        return getResources().getString(R.string.title_section3); 
      } 
      return null; 
     } 
    } 
} 

Antwort

1

Wenn Sie mit tablayout Eintrag verwenden und auf diese Weise es viewpager versuchen Sie

public class MainActivity extends AppCompatActivity { 
    private static Toolbar toolbar; 
    private static ViewPager viewPager; 
    private static TabLayout tabLayout; 

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

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     viewPager = (ViewPager) findViewById(R.id.viewPager); 
     setupViewPager(viewPager); 

     tabLayout = (TabLayout) findViewById(R.id.tabLayout); 
     tabLayout.setupWithViewPager(viewPager);//setting tab over viewpager 

     //Implementing tab selected listener over tablayout 
     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition());//setting current selected item over viewpager 
       switch (tab.getPosition()) { 
        case 0: 
         Log.e("TAG","TAB1"); 
         break; 
        case 1: 
         Log.e("TAG","TAB2"); 
         break; 
        case 2: 
         Log.e("TAG","TAB3"); 
         break; 
       } 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 
      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 
      } 
     }); 
    } 


    //Setting View Pager 
    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFrag(new DummyFragment("ANDROID"), "ANDROID"); 
     adapter.addFrag(new DummyFragment("iOS"), "iOS"); 
     adapter.addFrag(new DummyFragment("WINDOWS"), "WINDOWS"); 
     viewPager.setAdapter(adapter); 
    } 


    //View Pager fragments setting adapter class 
    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>();//fragment arraylist 
     private final List<String> mFragmentTitleList = new ArrayList<>();//title arraylist 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 


     //adding fragments and title method 
     public void addFrag(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 

für mehr sehen arbeiten android-material-design-tabs-using-tablayout

OR

prüfen diese http://www.tutorialsbuzz.com/2015/10/Android-Sliding-TabLayout-ListView-WhatsApp.html

Und überprüfen Sie diese https://github.com/codepath/android_guides/wiki/Handling-Scrolls-with-CoordinatorLayout

OUTPUT

enter image description here

+0

Wah bhura Wah! ! – Piyush

0

Ich werde erklären, was Sie ein Listview zu tun haben, an sich zu setzen eines der Fragmente. (Sorry, wenn ich ein schlechtes Englisch schreibe)

Sie sollten Ihre ListView-Ansicht auf die XML-Hexe setzen, die von einem Ihrer Fragmente angezeigt wird. In dem Code, den Sie die Layout-Hexe Fragment Displays hinterlassen haben, ist R.layout.main_fragment

Dann auf dem Fragment Sie haben Ihre Listview zu erklären:

ListView list_all = (ListView) rootView.findViewById(R.id.listViewAll);

Sie haben ein Listview-Adapter zu erstellen, eine Objektklasse und einige andere Dateien, können Sie das Tutorial verwenden, das Sie post haben.

Link

Dann schreiben Sie Ihren Code ein Adapter auf diese Listview einstellen, nachdem die RootView auf dem Fragment zugeordnet:

if (sectionNumber == 1){ 
     rootView = inflater.inflate(R.layout.main_fragment, container, false); 
     }else if (sectionNumber == 2){ 
      rootView = inflater.inflate(R.layout.main_fragment, container, false);     
     }else if (sectionNumber == 3){ 
      rootView = inflater.inflate(R.layout.main_fragment, container, false);     
     }else{ 
      rootView = inflater.inflate(R.layout.main_fragment, container, false); 
} 

ArrayList<Object> arrayListOfObjects = new ArrayList<>(); 
arrayListOfObjects.add(new Object(...)); 
MyAdapter adapter = new MyAdapter(arrayListOfObjects); 
list_all.setListAdapter(adapter); 
0

ich es jetzt in Haupt durch einfaches Editieren der getItem() Methode von public class SectionsPagerAdapter gelöst haben. Java. Geben Sie einfach ein Standard-ListFragment anstelle von PlaceholderFragment zurück. Interessanter Hinweis: Wenn dasselbe ListFragment-Objekt für alle Registerkarten zurückgegeben wird, führt dies zu einem Fehler.

main.java:

public class MainActivity extends AppCompatActivity { 

    private ArrayAdapter<String> adapter; 

    private ListFragment contacts1 = new ListFragment(); 
    private ListFragment contacts2 = new ListFragment(); 
    private ListFragment contacts3 = new ListFragment(); 

    List<String> words = new ArrayList<String>(); 

    private SectionsPagerAdapter mSectionsPagerAdapter; 

    /** 
    * The {@link ViewPager} that will host the section contents. 
    */ 
    private ViewPager mViewPager; 

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

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     // Create the adapter that will return a fragment for each of the three 
     // primary sections of the activity. 
     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

     // Set up the ViewPager with the sections adapter. 
     mViewPager = (ViewPager) findViewById(R.id.container); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(mViewPager); 

     words.add("Hello"); 
     words.add("World"); 
     words.add("!"); 
     adapter = new ArrayAdapter<String>(this,R.layout.item,words); 
     contacts1.setListAdapter(adapter); 
     contacts2.setListAdapter(adapter); 
     contacts3.setListAdapter(adapter); 


     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Update List", Snackbar.LENGTH_LONG).setAction("Action", null).show(); 
       words.add("New Item"); 
       adapter.notifyDataSetInvalidated(); 
      } 
     }); 

    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 


    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

     public SectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public ListFragment getItem(int position) { 

      if (position == 0){ 
       return contacts1; 
      }else if (position == 1){ 
       return contacts2; 
      }else{ 
       return contacts3; 
      } 


     } 

     @Override 
     public int getCount() { 
      // Show 3 total pages. 
      return 3; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      switch (position) { 
       case 0: 
        return "SECTION 1"; 
       case 1: 
        return "SECTION 2"; 
       case 2: 
        return "SECTION 3"; 
      } 
      return null; 
     } 
    } 
} 
Verwandte Themen