TabLayout没有正确显示片段

时间:2016-02-25 19:49:51

标签: android android-fragments

我有一个tablayout的活动。创建活动时,将创建viewpageradapter并向其添加3个相同片段类的实例。然后,我将适配器设置为视图寻呼机。

我知道片段添加正确发生,因为我的片段执行asyncTask并且其日志语句出现在控制台中。出于某种原因,当我开始活动时,我可以看到应用栏和显示选项卡的小部件,但片段应该出现的空格是空的。我做错了什么?

这是我的代码:

MainActivity

require("request")("http://www.google.com/recaptcha/api/challenge?k=6Leluc8SAAAAAElzN1CrcweqVxkUfmGa7QC40pUU", function(error, response, body) {
    require('fs').writeFile('./stuff.js', body, function(err) {
        if(err) {
            return console.log(err);
        }
        var stuffIJustLoaded = require('./stuff.js');
    }); 
});

ViewPagerAdapter

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

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

public class MainActivity extends AppCompatActivity {

    private final String LIST_TAG = MovieListFragment.class.getSimpleName();
    private final String DETAIL_TAG = DetailActivityFragment.class.getSimpleName();
    private final String POPULAR = "POPULAR";
    private final String HIGHEST_RATED = "HIGHEST RATED";
    private final String FAVOURITE = "FAVOURITE";
    private boolean mTwoPane;
    private TabLayout mTabLayout;
    private ViewPager mViewPager;

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

        //We check if the layout selected has two fragments
        if (findViewById(R.id.movie_detail_container) != null) {
            //If it has two, we update our member variable
            mTwoPane = true;

            /*If the activity has been recently created, we replace the placeholder
            frameview with the actual detail fragment
             */
            if (savedInstanceState == null) {
                getSupportFragmentManager().beginTransaction()
                        .replace(
                                R.id.movie_detail_container,
                                new DetailActivityFragment(),
                                DETAIL_TAG
                        ).commit();
            }
        } else {
            mTwoPane = false;
        }

        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(mViewPager);

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

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        /*If it's the first time we launch the activity, we create a fragment
        and tag it so we have a reference to find it later
         */
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        MovieListFragment popular = new MovieListFragment();
        MovieListFragment highestRated = new MovieListFragment();
        MovieListFragment favourites = new MovieListFragment();

        populateFragment(popular);
        populateFragment(highestRated);
        populateFragment(favourites);

        adapter.addFragment(popular, POPULAR);
        adapter.addFragment(highestRated, HIGHEST_RATED);
        adapter.addFragment(favourites, FAVOURITE);
        viewPager.setAdapter(adapter);
    }

    private void populateFragment(Fragment fragment) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, fragment)
                .commit();
    }

    @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();
        //We identify the option clicked and act accordingly
        switch (id) {
            /* Not necessary at this stage of the project. Will be
            populated later.
             */
            case R.id.action_settings: {
                return true;
            }
            /* If the sort method is changed we start an asynchronous task
            and fetch the appropriate movies.
             */
            case R.id.sort_popularity: {
                MovieListFragment.setmSortOrder("popularity.desc");
                MovieListFragment movieListFragment = (MovieListFragment)
                        getSupportFragmentManager().findFragmentByTag(LIST_TAG);
                movieListFragment.retrieveMovies();
                break;
            }
            case R.id.sort_highest_Rating: {
                MovieListFragment.setmSortOrder("vote_average.desc");
                MovieListFragment movieListFragment = (MovieListFragment)
                        getSupportFragmentManager().findFragmentByTag(LIST_TAG);
                movieListFragment.retrieveMovies();
                break;
            }
        }

        return super.onOptionsItemSelected(item);
    }
}

MovieListFragment

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

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

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 new MovieListFragment();
    }

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

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

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

非常感谢您提前

0 个答案:

没有答案
相关问题