ViewPage

ViewPage的自动翻页

Activity代码

package com.example.day07;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;

import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {
    private ViewPager vp;
    private Timer timer;
    Handler handler = new Handler() {
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            vp.setCurrentItem(msg.arg1);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vp = (ViewPager) findViewById(R.id.vp);
        final List<String> data = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            data.add("第" + (i + 1) + "页");
        }
        vp.setAdapter(new VpAdapter(this, data));
        timer = new Timer();
        timer.schedule(new TimerTask() {
            int index = 0;
            @Override
            public void run() {
                Message message = new Message();
                message.arg1 = index;
                handler.sendMessage(message);
                index++;
                if (index == data.size()) {
                    index = 0;
                }
            }
        }, 0, 1000);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        timer.cancel();
    }
}

Activity布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></androidx.viewpager.widget.ViewPager>

</LinearLayout>

适配器代码

package com.example.day07;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;

import java.util.List;

public class VpAdapter extends PagerAdapter {

    private Context context;
    private List<String> data;


    public VpAdapter(Context context, List<String> data) {
        this.context = context;
        this.data = data;
    }

    //    getCount( ):获得viewpager中有多少个view
    @Override
    public int getCount() {
        return data.size();
    }

    //    isViewFromObject( ):
//    判断instantiateItem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是 代表的同一个视图
//    (即它俩是否是对应的,对应的表示同一个View),
//    通常我们直接写 return view == object
    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    //    instantiateItem( ):①将给定位置的view添加到ViewGroup(容器)中,创建并显示出来
//    ②返回一个代表新增页面的Object(key),通常都是直接返回view本身就可以了, 当然你也可以自定义自己的key,但是key和每个view要一一对应的关系
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        View inflate = View.inflate(context, R.layout.vp_layout, null);
        TextView textView = inflate.findViewById(R.id.txt);
        textView.setText(data.get(position));
        container.addView(inflate);
        return inflate;
    }

    //    destroyItem( ):移除一个给定位置的页面。适配器有责任从容器中删除这个视图。
//    这是为了确保 在finishUpdate(viewGroup)返回时视图能够被移除。
    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
//        super.destroyItem(container, position, object);
//        必须删除否则报错
        container.removeView((View) object);
    }
}

ViewPage的布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/txt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="123456"
        android:textSize="50dp" />
</RelativeLayout>

ViewPage嵌入Fragment

Activity布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main2Activity">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/main2_vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></androidx.viewpager.widget.ViewPager>
</LinearLayout>

Activity具体代码

package com.example.day07;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;

import android.os.Bundle;

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

public class Main2Activity extends AppCompatActivity {
    private ViewPager main2Vp;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        main2Vp = (ViewPager) findViewById(R.id.main2_vp);
        final List<BlankFragment> list = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            BlankFragment blankFragment = new BlankFragment();
            Bundle bundle = new Bundle();
            bundle.putString("key","第"+i+"个");
            blankFragment.setArguments(bundle);
            list.add(blankFragment);
        }
        main2Vp.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @NonNull
            @Override
            public Fragment getItem(int position) {
                return list.get(position);
            }

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

Fragment布局文件

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
    tools:context=".BlankFragment">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:id="@+id/main2_txt"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/hello_blank_fragment" />

</FrameLayout>

Fragment具体代码

package com.example.day07;


import android.os.Bundle;

import androidx.fragment.app.Fragment;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;


/**
 * A simple {@link Fragment} subclass.
 */
public class BlankFragment extends Fragment {
    private TextView main2Txt;


    public BlankFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View inflate = inflater.inflate(R.layout.fragment_blank, container, false);
        main2Txt = inflate.findViewById(R.id.main2_txt);
        String key = (String) getArguments().get("key");
        main2Txt.setText(key);
        return inflate;
    }

}

ViewPage与TableLayout与Fragment

Activity布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".Main3Activity">

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/main3_tab"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

    </com.google.android.material.tabs.TabLayout>

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/main3_vp"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="8">

    </androidx.viewpager.widget.ViewPager>

自定义适配器

package com.example.day07;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;

import java.util.List;

public class MyFragmentAdapter extends FragmentStatePagerAdapter {
    private List<Fragment> listFragment;
    private List<String> listString;

    public MyFragmentAdapter(@NonNull FragmentManager fm, List<Fragment> listFragment, List<String> listString) {
        super(fm);
        this.listFragment = listFragment;
        this.listString = listString;
    }

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

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

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

Activity具体代码

package com.example.day07;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;

import android.os.Bundle;

import com.google.android.material.tabs.TabLayout;

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

public class Main3Activity extends AppCompatActivity {
    private TabLayout main3Tab;
    private ViewPager main3Vp;
    List<Fragment> listFragment = new ArrayList<>();
    List<String> listString = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        main3Tab = (TabLayout) findViewById(R.id.main3_tab);
        main3Vp = (ViewPager) findViewById(R.id.main3_vp);

        listFragment.add(new BlankFragment2());
        listFragment.add(new BlankFragment2());
        listFragment.add(new BlankFragment2());
        listFragment.add(new BlankFragment2());
        listString.add("1");
        listString.add("2");
        listString.add("3");
        listString.add("4");
        MyFragmentAdapter myFragmentAdapter = new MyFragmentAdapter(getSupportFragmentManager(), listFragment, listString);
        main3Vp.setAdapter(myFragmentAdapter);
        main3Tab.setupWithViewPager(main3Vp);

    }
}

加上RadioGroup

package com.example.day07;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;

import android.os.Bundle;
import android.util.Log;
import android.widget.RadioButton;
import android.widget.RadioGroup;

import com.google.android.material.tabs.TabLayout;

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

public class Main3Activity extends AppCompatActivity {
    private TabLayout main3Tab;
    private ViewPager main3Vp;
    private RadioGroup rg;
    private RadioButton rb1;
    private RadioButton rb2;
    private RadioButton rb3;
    private RadioButton rb4;


    List<Fragment> listFragment = new ArrayList<>();
    List<String> listString = new ArrayList<>();
    private static final String TAG = "Main3Activity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        main3Tab = (TabLayout) findViewById(R.id.main3_tab);
        main3Vp = (ViewPager) findViewById(R.id.main3_vp);
        rg = (RadioGroup) findViewById(R.id.rg);
        rb1 = (RadioButton) findViewById(R.id.rb1);
        rb2 = (RadioButton) findViewById(R.id.rb2);
        rb3 = (RadioButton) findViewById(R.id.rb3);
        rb4 = (RadioButton) findViewById(R.id.rb4);

        listFragment.add(new BlankFragment2());
        listFragment.add(new BlankFragment2());
        listFragment.add(new BlankFragment2());
        listFragment.add(new BlankFragment2());
        listString.add("1");
        listString.add("2");
        listString.add("3");
        listString.add("4");
        MyFragmentAdapter myFragmentAdapter = new MyFragmentAdapter(getSupportFragmentManager(), listFragment, listString);
        main3Vp.setAdapter(myFragmentAdapter);
        main3Tab.setupWithViewPager(main3Vp);
        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                    case R.id.rb1:
                        main3Vp.setCurrentItem(0);
                        break;
                    case R.id.rb2:
                        main3Vp.setCurrentItem(1);
                        break;
                    case R.id.rb3:
                        main3Vp.setCurrentItem(2);
                        break;
                    case R.id.rb4:
                        main3Vp.setCurrentItem(3);
                        break;
                }
            }
        });
        main3Vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                Log.i(TAG, "onPageSelected: " + position);
                switch (position) {
                    case 0:
                        rb1.setChecked(true);
                        break;
                    case 1:
                        rb2.setChecked(true);
                        break;
                    case 2:
                        rb3.setChecked(true);
                        break;
                    case 3:
                        rb4.setChecked(true);
                        break;
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值