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;
}
@Override
public int getCount() {
return data.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@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;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object 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;
public class BlankFragment extends Fragment {
private TextView main2Txt;
public BlankFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
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) {
}
});
}
}