從昨天下午就搞把這三種一起組合,然后就寫(xiě),但就是不行,快瘋了,寫(xiě)了一遍又一遍就是不行,如果看到我文件包名時(shí),你就知道我有多氣憤了。今天中午吃飯的時(shí)候就突然想起是不是布局出了點(diǎn)什么問(wèn)題。一瞅,之前我按照官網(wǎng)上的說(shuō)是用一般使用水平布局,一打ViewPager布局就發(fā)現(xiàn)這布局的寬度幾乎為0dp的,就是一場(chǎng)豎道。我去,然后換成相對(duì)布局,就重新調(diào)了調(diào),然后就行了,我都快哭了。
在文件上是兩部分一個(gè)是Fragment,另一個(gè)就是操作了。
我是新建了兩個(gè)Fragment這就不全貼出來(lái)了,上上篇都說(shuō)了很簡(jiǎn)單,F(xiàn)ragment有著和Activity 相似的生命周期。用他進(jìn)行管理操作很簡(jiǎn)單和Activity只是創(chuàng)建的方法不同。
創(chuàng)建一個(gè)布局進(jìn)行界面顯示。
添加 compile 'com.Android.support:design:23.2.1' 備用
1、創(chuàng)建tab_1.xml
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas./apk/res/android"
- android:background="#990033"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <Button
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textAllCaps="false"
- android:text="Tab_1_Toast"
- android:id="@+id/button1_Toast"
- android:layout_centerVertical="true"
- android:layout_centerHorizontal="true" />
- </RelativeLayout>
一個(gè)Button而已。
2、然后創(chuàng)建一個(gè)管理它的類(lèi)這個(gè)類(lèi)繼承Fragment (Tab_Fragment_1)
- package com.example.hejingzhou.sb;
-
- import android.os.Bundle;
- import android.support.annotation.Nullable;
- import android.support.v4.app.Fragment;
- import android.support.v7.widget.LinearLayoutManager;
- import android.support.v7.widget.RecyclerView;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.Button;
- import android.widget.Toast;
-
- /**
- * Created by Hejingzhou on 2016/4/9.
- */
- public class Tab_Fragment_1 extends Fragment {
-
-
- @Nullable
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View viewTab_1 = inflater.inflate(R.layout.tab_1, container, false);
- Click(viewTab_1);
- return viewTab_1;
- }
-
- private void Click(View view) {
- Button btnToast_1 = (Button) view.findViewById(R.id.button1_Toast);
- btnToast_1.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(getActivity(), "第一個(gè)界面的Button", Toast.LENGTH_SHORT).show();
- }
- });
- }
-
- }
這樣的一個(gè)例子就熟悉了操作過(guò)程,和管理過(guò)程。
3、接下來(lái)我們需要在創(chuàng)建主界面的自動(dòng)創(chuàng)建的main_activity.xml中添加TabLayout和ViewPaget TabLayout是由android.support.design.widget包提供。這就是引入compile 'com.android.support:design:23.2.1'的原因了。
- package com.example.hejingzhou.sb;
-
-
-
-
- import android.support.annotation.Nullable;
- import android.support.design.widget.TabLayout;
- import android.support.v4.app.Fragment;
- import android.support.v4.app.FragmentManager;
- import android.support.v4.app.FragmentPagerAdapter;
- import android.support.v4.view.PagerAdapter;
- import android.support.v4.view.ViewPager;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.ViewGroup;
- import android.widget.Toast;
-
-
- import java.util.ArrayList;
- import java.util.List;
-
-
- public class MainActivity extends AppCompatActivity {
- private String TAG = getClass().getSimpleName();
- private ViewPager viewPager;
- private TabLayout tabLayout;
- private List<Fragment> fragmentsList;//fragment容器
- private List<String> titleList;//標(biāo)簽容器
-
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- load();//加載
- }
-
-
- private void load() {
- tabLayout = (TabLayout) findViewById(R.id.tabLayout);
- viewPager = (ViewPager) findViewById(R.id.viewPager);
-
-
- fragmentsList = new ArrayList<>();
- titleList = new ArrayList<>();
-
-
- fragmentsList.add(new Tab_Fragment_1());
- fragmentsList.add(new Tab_Fragment_2());//將fragment添加到fragmentList的list容器里
- for (int i = 0; i < 3; i++) { //重復(fù)添加 只是填充 沒(méi)什么用
- fragmentsList.add(new Tab_Fragment_1());
- }
- titleList.add("新聞");
- titleList.add("笑話");
- titleList.add("段子");
- titleList.add("視頻");
- titleList.add("圖片");
-
-
- tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);//tab的模式如果標(biāo)簽多的話用MODE_SCROLLABLE 少的話用MODE_FIXED
- //tabLayout.setBackgroundColor(Color.BLUE);
-
-
- FragViewAdapter adapter = new FragViewAdapter(getSupportFragmentManager(), fragmentsList, titleList);
- viewPager.setAdapter(adapter);
- tabLayout.setupWithViewPager(viewPager);
- tabLayout.setTabsFromPagerAdapter(adapter);//雖然過(guò)時(shí)了但是不能去掉,去掉后
- //如果是滑動(dòng)操作的話沒(méi)事,但是使用標(biāo)簽點(diǎn)擊的時(shí)候就不行了。
- /**
- * @deprecated Use {@link #setupWithViewPager(ViewPager)} to link a TabLayout with a ViewPager
- * together. When that method is used, the TabLayout will be automatically updated
- * when the {@link PagerAdapter} is changed.
- */
- /*@Deprecated
- public void setTabsFromPagerAdapter(@Nullable final PagerAdapter adapter) {
- setPagerAdapter(adapter, false);
- }*/
-
-
- /**
- * 選擇tablayout的監(jiān)聽(tīng),一般是用不到的
- */
- tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
- @Override
- public void onTabSelected(TabLayout.Tab tab) {
- if (tab.getText().equals("新聞")) {
- Toast.makeText(getApplicationContext(), "滑動(dòng)或點(diǎn)擊了新聞", Toast.LENGTH_SHORT).show();
- }
- if (tab.getPosition() == 1) {
- Toast.makeText(getApplicationContext(), "滑動(dòng)或點(diǎn)擊了笑話", Toast.LENGTH_SHORT).show();
- }
- }
-
-
- @Override
- public void onTabUnselected(TabLayout.Tab tab) {
- if (tab.isSelected()) {
- Toast.makeText(getApplicationContext(), "切換了Pager", Toast.LENGTH_SHORT).show();
- }
- Log.i(TAG, "tab.getTag()" + tab.getTag());
- }
-
-
- @Override
- public void onTabReselected(TabLayout.Tab tab) {
- //不知道干啥的
- }
- });
- }
-
-
- /**
- * 創(chuàng)建適配器,主要是為了fragmet與標(biāo)題進(jìn)行匹配的 繼承FragmentPagerAdapter
- */
- class FragViewAdapter extends FragmentPagerAdapter {
- List<Fragment> fragmentList_;
- List<String> titleList_;
-
-
- public FragViewAdapter(FragmentManager fm, List<Fragment> fragmentList, List<String> titleList) {
- super(fm);
- fragmentList_ = fragmentList;
- titleList_ = titleList;
- }
-
-
- @Override//fragment匹配
- public Fragment getItem(int position) {
- Log.i(TAG, "getItem " + fragmentList_.get(position));
- return fragmentList_.get(position);
- }
-
-
- @Override//獲取fragment的數(shù)量
- public int getCount() {
- return titleList_.size();
- }
-
-
- @Override//對(duì)標(biāo)題進(jìn)行匹配
- public CharSequence getPageTitle(int position) {
- Log.i(TAG, "getPageTitle " + titleList_.get(position));
- return titleList_.get(position);
- }
-
-
- @Override//銷(xiāo)毀 不知道這樣做行不行
- public void destroyItem(ViewGroup container, int position, Object object) {
- super.destroyItem(container, position, object);
- fragmentList_.get(position).onDestroy();
- }
- }
- }
把陌生的方法都做注釋了,也沒(méi)啥可說(shuō)的。
效果:
下一步就準(zhǔn)備做一個(gè)大框架 了,將側(cè)滑菜單導(dǎo)航欄和選項(xiàng)卡和浮動(dòng)Button與RecyclerView CardView都組合在一起,然后再加上一些免費(fèi)的額接口我的第一個(gè)APP要在畢業(yè)前做完。
|