老师这个问题怎么弄,viewpager跳转问题

不管用不用线程都会在:viewPager.setCurrentItem(index%4);这段运行到这段代码的时候崩溃
package com.example.mootaoapp.fragmet;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.ViewPager2;
import android.os.Handler;
import android.os.Message;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.example.mootaoapp.R;
/**
* A simple {@link Fragment} subclass.
*/
public class IndexFragment extends Fragment {
private ViewPager2 viewPager;
private View view;
private LinearLayout pointers;//指示器
private int index=1;
private int[] pager_pic = {R.drawable.header_pic_ad1, R.drawable.header_pic_ad2, R.drawable.header_pic_ad1, R.drawable.header_pic_ad2};
public IndexFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_index, container, false);
viewPager = view.findViewById(R.id.viewpager);
pointers = view.findViewById(R.id.pointers);
viewPager_set();
return view;
}
//viewPager相关设置
public void viewPager_set() {
final Handler handler=new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
viewPager.setCurrentItem(msg.arg1);
}
};
RecyclerView.Adapter adapter = new RecyclerView.Adapter() {
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(getContext()).inflate(R.layout.viewpager_item, parent, false);
return new ViewHodler(v);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
ViewHodler viewHodler = (ViewHodler) holder;
viewHodler.v.setBackgroundResource(pager_pic[position]);
}
@Override
public int getItemCount() {
return pager_pic.length;
}
};
viewPager.setAdapter(adapter);
//设置指示器的跳转
viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
for (int i = 0; i < pointers.getChildCount(); i++) {
ImageView imageView = (ImageView) pointers.getChildAt(i);
imageView.setImageResource(R.drawable.unselect);
}
((ImageView) pointers.getChildAt(position)).setImageResource(R.drawable.select);
}
});
//开启线程设置自动滑动
new Thread(){
@Override
public void run() {
super.run();
while (true) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
viewPager.setCurrentItem(index%4);
index++;
Message message=new Message();
message.what=1;
message.arg1=index;
handler.sendMessage(message);
}
}
}.start();
}
//ViewHodler
class ViewHodler extends RecyclerView.ViewHolder {
View v;
public ViewHodler(@NonNull View itemView) {
super(itemView);
this.v = itemView;
}
}
}
正在回答 回答被采纳积分+1
- 参与学习 人
- 提交作业 1789 份
- 解答问题 2907 个
Android大楼Java起,本阶段是Android攻城狮培养计划的第一部分语法与界面基础篇,将带大家从0开始入门Android开发。
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星