2016-09-19 2 views
0

Ich habe eine MainActivity, die AppBar enthält Symbolleiste und TabLayout, und auch ViewPager.Android Fragment ersetzen onClick sowie die ausgewählte Registerkarte zu ändern

MainActivity enthält 4 Fragmente nach Hause, Bargeld, Karte und Konto.

public class MainActivity extends AppCompatActivity { 

    private TabLayout tabLayout; 
    private ViewPager viewPager; 
    private AppBarLayout appBarLayout; 
    Window window; 

    @Override 
    @SuppressWarnings("deprecation") 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     window = this.getWindow(); 
     window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
     window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      window.setStatusBarColor(this.getResources().getColor(R.color.color_primary_green_dark)); 
     } 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     ActionBar ab = getSupportActionBar(); 
     ab.setTitle("Example Wallet"); 
     toolbar.setTitleTextColor(getResources().getColor(android.R.color.white)); 
     appBarLayout = (AppBarLayout) findViewById(R.id.appBarLayout); 

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

     tabLayout = (TabLayout) findViewById(R.id.tabLayout); 
     tabLayout.setupWithViewPager(viewPager); 
     viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      } 

      @Override 
      public void onPageSelected(int position) { 
       Toast.makeText(getBaseContext(), "Tab " + position + " Onpage Selected " + viewPager.getCurrentItem(), Toast.LENGTH_SHORT).show(); 
       if (position == 0) { 
        appBarLayout.setBackgroundColor(getResources().getColor(R.color.color_primary_green)); 
        tabLayout.setBackgroundColor(getResources().getColor(R.color.color_primary_green_dark)); 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
         window.setStatusBarColor(getResources().getColor(R.color.color_primary_green_dark)); 
        } 
       } else if (position == 1) { 
        appBarLayout.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); 
        tabLayout.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark)); 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
         window.setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark)); 
        } 
       } else if (position == 2) { 
        appBarLayout.setBackgroundColor(getResources().getColor(R.color.color_primary_yellow)); 
        tabLayout.setBackgroundColor(getResources().getColor(R.color.color_primary_yellow_dark)); 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
         window.setStatusBarColor(getResources().getColor(R.color.color_primary_yellow_dark)); 
        } 
       } else if (position == 3) { 
        appBarLayout.setBackgroundColor(getResources().getColor(R.color.color_primary_red)); 
        tabLayout.setBackgroundColor(getResources().getColor(R.color.color_primary_red_dark)); 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
         window.setStatusBarColor(getResources().getColor(R.color.color_primary_red_dark)); 
        } 
       } else { 
        appBarLayout.setBackgroundColor(getResources().getColor(R.color.color_primary_green)); 
        tabLayout.setBackgroundColor(getResources().getColor(R.color.color_primary_green_dark)); 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
         window.setStatusBarColor(getResources().getColor(R.color.color_primary_green_dark)); 
        } 
       } 

      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 

     FloatingActionButton fab1 = (FloatingActionButton) findViewById(R.id.fab); 
     if (fab1 != null) { 
      fab1.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Intent registerIntent = new Intent(MainActivity.this, Detail.class); 
        startActivity(registerIntent); 
       } 

      }); 
     } 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFrag(new FragmentMain(), "Home"); 
     adapter.addFrag(new FragmentCash(), "Cash"); 
     adapter.addFrag(new FragmentCard(), "Card"); 
     adapter.addFrag(new FragmentAccount(), "Account"); 
     adapter.addFrag(PartThreeFragment.createInstance(20), "Tab1"); 
     viewPager.setAdapter(adapter); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

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

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

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

     public void addFrag(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 

      // return null to display only the icon 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 

Haus Fragment Code

public class FragmentMain extends Fragment { 
    private List<Movie> movieList1 = new ArrayList<>(); 
    private List<Movie> movieList2 = new ArrayList<>(); 
    private RecyclerView recyclerView,recyclerView1; 
    private MovieAdapter mAdapter1,mAdapter2; 
    private LinearLayout cash_layout,card_layout,account_layout; 
    private ViewGroup c; 

    public FragmentMain() { 

    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v= inflater.inflate(R.layout.content_main, container, false); 
     //final android.app.ActionBar actionBar = getActivity().getActionBar(); 
     //c=container; 
     recyclerView = (RecyclerView) v.findViewById(R.id.my_recycler_view); 
     cash_layout = (LinearLayout) v.findViewById(R.id.linearLayout_cash_bal); 
     card_layout = (LinearLayout) v.findViewById(R.id.linearLayout_card_bal); 
     account_layout = (LinearLayout) v.findViewById(R.id.linearLayout_account_bal); 

     mAdapter1 = new MovieAdapter(movieList1); 
     RecyclerView.LayoutManager mLayoutManager1 = new LinearLayoutManager(v.getContext()); 
     recyclerView.setLayoutManager(mLayoutManager1); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(mAdapter1); 
     prepareMovieData1(); 

     cash_layout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      @SuppressWarnings("deprecation") 
      public void onClick(View v) { 
       getContext().getActionBar().setSelectedNavigationItem(2); 
       /*actionBar.selectTab(actionBar.getTabAt(1)); 
       FragmentManager fm=getFragmentManager(); 
       fm.beginTransaction().replace(R.layout.content_cash, (Fragment)new FragmentCash()).commit(); 
       getActivity().getActionBar().setTitle("Home"); 
       //ActionBar actionBar = getActivity().getActionBar();*/ 
       /*FragmentCash fragment2 = new FragmentCash(); 
       FragmentManager fragmentManager = getFragmentManager(); 
       FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
       fragmentTransaction.replace(R.id.fragment_container,fragment2); 
       fragmentTransaction.addToBackStack(null); 
       fragmentTransaction.commit();*/ 
      } 
     }); 

     /*mAdapter2 = new MovieAdapter(movieList2); 
     RecyclerView.LayoutManager mLayoutManager2 = new LinearLayoutManager(v.getContext()); 
     recyclerView1.setLayoutManager(mLayoutManager2); 
     recyclerView1.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView1.setAdapter(mAdapter2); 
     prepareMovieData2();*/ 
     return v; 
    } 

    private void prepareMovieData1() { 
     movieList1.clear(); 
     Movie movie = new Movie("info","List is empty", "To create an item, click on (+) button", "",""); 
     movieList1.add(movie); 
     mAdapter1.notifyDataSetChanged(); 
    } 

    /*public void onClick1(View v) { 
     FragmentCash fragment2 = new FragmentCash(); 
     FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(android.R.id.content,fragment2); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
    }*/ 

    /*private void prepareMovieData2() { 
     Movie movie = new Movie("card","Card", "New Dress", "Rs.50.00","11/09/2016"); 
     movieList2.add(movie); 
     mAdapter2.notifyDataSetChanged(); 
    }*/ 
} 

Ich versuche, Geld zu rufen, Karten- und Konto Fragment von zu Hause Fragmente aber diesen Code

cash_layout.setOnClickListener(new View.OnClickListener() { 
    @Override 
    @SuppressWarnings("deprecation") 
    public void onClick(View v) { 
     FragmentCash fragment2 = new FragmentCash(); 
     FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.fragment_container,fragment2); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
    } 
}); 

fügt anderes Fragment mit sichtbarem Hause Fragmente.

Die Lösung, die ich brauche, ist, in der unteren Abbildung, wenn ich auf das Kassenguthaben klicke, rutsche es auf den Kassenreiter mit Bargeldfragment auf dem Bildschirm.

screenshot

Antwort

0

Es sieht aus wie Sie versuchen, das Cash-Fragment auf der Pager Ansicht hinzuzufügen, oder sie alle zusammen zu ersetzen. Anstatt es in der aktuellen Ansicht zu ersetzen, gehe ich davon aus, dass Sie innerhalb des viewPagers zu diesem navigieren möchten.

, das zu tun, ersetzen Sie alle Ihre onClick Code mit pager.setCurrentItem(//Page number with cash fragment on it)

Also, Ihr onClick würde wie folgt aussehen:

cash_layout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     @SuppressWarnings("deprecation") 
     public void onClick(View v) { 
      ((MainActivity) getActivity()).getViewPager().setCurrentItem(//Your desired page number as int); 
     } 
    }); 

Oder Sie könnten dies leicht mit einer Schnittstelle lösen.

Erstellen Sie einfach eine Schnittstelle, um auf die Operationen Ihres viewPager zuzugreifen.

public interface ViewPagerInterface { 
    ViewPager getViewPager(); 
} 

Haben Sie Ihre Tätigkeit, die er umsetzen:

public MainActivity extends AppCompatActvity implements ViewPagerInterface { 

    @Override 
    public ViewPager getViewPager() { 
     return this.viewPager; 
    } 
} 

Dann diese Schnittstelle zu Ihrer Fragmente passieren und die getViewPager Methode aufrufen.

viewPagerInterface.getViewPager().setCurrentItem(<my-int>);

+0

immer ein Fehler als nicht Methode .getViewPager auflösen kann() .. –

+0

Nun Dank für die Hilfe @Weava, aber ich habe eine Lösung. 'TabLayout tabhost = (TabLayout) getActivity() .findViewById (R.id.tabLayout); tabhost.getTabAt (1) .select(); ' –

Verwandte Themen