簡體   English   中英

優化android中的滑動選項卡片段

[英]optimizing swiping tab fragments in android

我有10個標簽的滑動標簽活動。 從第1天到第10天,我在每個標簽中顯示那十天的電影列表。這就是我所做的,

  • 我為每個選項卡使用10個片段。 所有十個標簽片段都是相同的,我只是更改每個標簽中的url以獲取特定日期的標簽列表。
  • 現在我的問題是:有什么辦法可以對所有十個選項卡僅使用一個片段,並為每個選項卡傳遞不同的URL?

公共類TabImageActivity擴展了AppCompatActivity {

private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;

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

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

    //getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setTitle("Screening");

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

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
    viewPager.setCurrentItem(0, false);
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new ImageFragment1(), "20th Nov.");
    adapter.addFragment(new ImageFragment2(), "21st Nov.");
    adapter.addFragment(new Day3Fragment(), "22nd Nov.");
    adapter.addFragment(new Day4Fragment(), "23rd Nov.");
    adapter.addFragment(new Day5Fragment(), "24th Nov.");
    adapter.addFragment(new Day6Fragment(), "25th Nov.");
    adapter.addFragment(new Day7Fragment(), "26th Nov.");
    adapter.addFragment(new Day8Fragment(), "27th Nov.");
    adapter.addFragment(new Day9Fragment(), "28th Nov.");
    adapter.addFragment(new Day10Fragment(), "29th Nov.");
    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 addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

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

}

我的第一個標簽片段

public class ImageFragment1 extends Fragment {
private static final String TAG = ImageFragment1.class.getSimpleName();
private static String bitmap="thumbnailUrl";
// Movies json url
private static final String url = "My URL";

private ProgressDialog pDialog;
private List<Movie> movieList = new ArrayList<Movie>();

private CustomListAdapter adapter;

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

    final View rootView = inflater.inflate(R.layout.image_fragment1, container, false);
    GridView gridView = (GridView) rootView.findViewById(R.id.gridview);
    adapter = new CustomListAdapter(getActivity(), movieList);
    gridView.setAdapter(adapter);


    pDialog = new ProgressDialog(getContext());
    // Showing progress dialog before making http request
    pDialog.setMessage("Loading...");
    pDialog.show();


    if(movieList!=null){
        movieList.clear();
    }
    // Creating volley request obj
    JsonArrayRequest movieReq = new JsonArrayRequest(url,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());
                  hidePDialog();

                    // Parsing json
                    for (int i = 0; i < response.length(); i++) {
                        try {

                            JSONObject obj = response.getJSONObject(i);
                            Movie movie = new Movie();
                            movie.setTitle(obj.getString("title"));
                            movie.setThumbnailUrl(obj.getString("image"));
                        //  movie.setRating(((Number) obj.get("rating"))
                              //    .doubleValue());
                        //   movie.setYear(obj.getInt("releaseYear"));

                            // adding movie to movies array
                            movieList.add(0, movie);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }

                    // notifying list adapter about data changes
                    // so that it renders the list view with updated data
                    adapter.notifyDataSetChanged();
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
          hidePDialog();

        }
    });

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(movieReq);

    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id)
        {
            // this 'mActivity' parameter is Activity object, you can send the current activity.
            // Intent i = new Intent(getContext(), ImageViewActivity.class);
           // startActivity(i);
            //Get item at position

           // Movie item = (Movie) parent.getItemAtPosition(position);
            bitmap = ((Movie) movieList.get(position)).getThumbnailUrl();
            String title = ((TextView) rootView.findViewById(R.id.text)).getText().toString();
            Intent intent = new Intent(getContext(), ImageViewActivity.class);


            // Interesting data to pass across are the thumbnail size/location, the
            // resourceId of the source bitmap, the picture description, and the
            // orientation (to avoid returning back to an obsolete configuration if
            // the device rotates again in the meantime)
            bitmap = ((Movie) movieList.get(position)).getThumbnailUrl();

            // Starting single contact activity
            //  in.putExtra("THUMB", thumbNail.toString());
            // in.putExtra("image2", imgByte);
           intent.putExtra("images", bitmap);
            intent.putExtra("TITLE", title);
           // in.putExtra("LIKES", likes);
            //in.putExtra("DATE", date);
           // in.putExtra("VIDEO", video);
          //  in.putExtra("IDD", idd);
           // in.putExtra("UNIQUEID", deviceId);
            //Start details activity
            startActivity(intent);

        }
    });



    return rootView;
}

@Override
public void onDestroy() {
    super.onDestroy();
    hidePDialog();
}

private void hidePDialog() {
    if (pDialog != null) {
        pDialog.dismiss();
        pDialog = null;
    }

}


public class CustomListAdapter extends BaseAdapter {
    private Activity activity;
    private LayoutInflater inflater;
    private List<Movie> movieItems;
    ImageLoader imageLoader = AppController.getInstance().getImageLoader();

    public CustomListAdapter(Activity activity, List<Movie> movieItems) {
        this.activity = activity;
        this.movieItems = movieItems;
    }

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

    @Override
    public Object getItem(int location) {
        return movieItems.get(location);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    private int lastPosition = -1;

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null)
            convertView = inflater.inflate(R.layout.image_gridview_item, null);

        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();
        NetworkImageView thumbNail = (NetworkImageView) convertView.findViewById(R.id.picture);
        TextView title = (TextView) convertView.findViewById(R.id.text);
        //  TextView rating = (TextView) convertView.findViewById(R.id.rating);
        // TextView genre = (TextView) convertView.findViewById(R.id.genre);
        // TextView year = (TextView) convertView.findViewById(R.id.releaseYear);

        // getting movie data for the row
        Movie m = movieItems.get(position);

        // thumbnail image
        thumbNail.setImageUrl(m.getThumbnailUrl(), imageLoader);

        // title
        title.setText(m.getTitle());

        //animation
        Animation animation = AnimationUtils.loadAnimation(getContext(), (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top);
        convertView.startAnimation(animation);
        lastPosition = position;


        // rating
        // rating.setText("Rating: " + String.valueOf(m.getRating()));

        return convertView;
    }

}

}

對於其中一個項目,我與您具有相同的布局,大約有10個使用相同片段的選項卡。 例如,我有一個名為Movie Fragment的片段,那么我有一個看起來像這樣的新實例方法。

    public static MovieFragment newInstance(String movieUrl) {
    FeedFragment fragment = new FeedFragment();
    Bundle args = new Bundle();
    args.putString("url", movieUrl);
    fragment.setArguments(args);
    return fragment;
}

然后,您需要做的就是有一個方法可以像這樣從捆綁包中獲取數據

    public void getBundleInformation() {
    if (getArguments().containsKey("url") {
       movieUrl = getArguments().getString("url"); 
    }
}

然后你的適配器看起來像這樣

private void setupViewPager(ViewPager viewPager) { 
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
adapter.addFragment(MovieFragment.NewInstance(url), "20th Nov."); 
adapter.addFragment(MovieFragment.NewInstance(url), "21st Nov."); 
adapter.addFragment(MovieFragment.NewInstance(url), "22nd Nov."); 
adapter.addFragment(MovieFragment.NewInstance(url), "23rd Nov."); 
adapter.addFragment(MovieFragment.NewInstance(url), "24th Nov."); 
adapter.addFragment(MovieFragment.NewInstance(url), "25th Nov."); 
adapter.addFragment(MovieFragment.NewInstance(url), "26th Nov."); 
adapter.addFragment(MovieFragment.NewInstance(url), "27th Nov."); 
adapter.addFragment(MovieFragment.NewInstance(url), "28th Nov."); 
adapter.addFragment(MovieFragment.NewInstance(url), "29th Nov."); 
viewPager.setAdapter(adapter); 

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM