Android setText()在onClick()方法中不起作用

Android setText()在onClick()方法中不起作用,android,button,onclick,android-viewpager,settext,Android,Button,Onclick,Android Viewpager,Settext,我有一个查看页面,其中每个页面都有一个带有图像、一些文本和按钮的cardview。我需要每个页面的按钮文本被点击后改变。 因此,内部ViewPagerAdapter mapSize.setText()仅在setOnClickListener()外部起作用,而在onClick内部则不起作用。 这是我的ViewPagerAdapter课程 public class ViewPagerAdapter extends PagerAdapter { private List<Model&g

我有一个查看页面,其中每个页面都有一个带有图像、一些文本和按钮的cardview。我需要每个页面的按钮文本被点击后改变。 因此,内部ViewPagerAdapter mapSize.setText()仅在setOnClickListener()外部起作用,而在onClick内部则不起作用。 这是我的ViewPagerAdapter课程

public class ViewPagerAdapter extends PagerAdapter {

    private List<Model> models;
    private LayoutInflater layoutInflater;
    private Context context;
    private Button mapSize;
    private Integer size;
    private static final String TAG = "ViewPagerAdapter";

    public ViewPagerAdapter(Context context, List<Model> models, String playerName) {
        this.models = models;
        this.layoutInflater = layoutInflater;
        this.context = context;
    }

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

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
        return view.equals(o);
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, final int position) {
        layoutInflater = LayoutInflater.from(context);
        View view = null;

        ImageView imageView;
        TextView title, desc;
        imageView = view.findViewById(R.id.gameModeImage);
        title = view.findViewById(R.id.title);
        desc = view.findViewById(R.id.description);
        imageView.setImageResource(models.get(position).getImage());
        title.setText(models.get(position).getTitle());
        desc.setText(models.get(position).getDescription());
        mapSize = view.findViewById(R.id.mapSizeBtn);

        mapSize.setText("hello2"); //here works

        mapSize.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mapSize.setText("hello"); //here does not work
            }
        });
        container.addView(view, 0);

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "This page was clicked: " + position);
                    if (position != 1)
                        Toast.makeText(context, "Coming Soon.", Toast.LENGTH_SHORT).show();
                    else {
                        Intent newGameActivity = new Intent(context, com.game.project.GameActivity.class);
                        newGameActivity.putExtra("size", size);
                        context.startActivity(newGameActivity);
                    }
                }
        });


        return view;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView((View)object);
    }



}
public类ViewPagerAdapter扩展了PagerAdapter{
私有列表模型;
私人停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场;
私人语境;
私有按钮映射大小;
私有整数大小;
私有静态最终字符串TAG=“ViewPagerAdapter”;
public ViewPagerAdapter(上下文、列表模型、字符串播放器名称){
这个。模型=模型;
this.layoutInflater=layoutInflater;
this.context=上下文;
}
@凌驾
public int getCount(){
返回models.size();
}
@凌驾
公共布尔值isViewFromObject(@NonNull视图,@NonNull对象o){
返回视图。等于(o);
}
@非空
@凌驾
公共对象实例化项(@NonNull ViewGroup container,final int position){
layoutInflater=layoutInflater.from(上下文);
视图=空;
图像视图图像视图;
文本视图标题,描述;
imageView=view.findviewbyd(R.id.gameModeImage);
title=view.findViewById(R.id.title);
desc=view.findViewById(R.id.description);
setImageResource(models.get(position.getImage());
title.setText(models.get(position.getTitle());
desc.setText(models.get(position.getDescription());
mapSize=view.findViewById(R.id.mapSizeBtn);
mapSize.setText(“hello2”);//在这里工作
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mapSize.setText(“hello”);//此处不起作用
}
});
container.addView(视图,0);
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图v){
Log.d(标签,“点击此页面:”+位置);
如果(位置!=1)
Toast.makeText(上下文,“即将到来”,Toast.LENGTH_SHORT.show();
否则{
Intent newGameActivity=newintent(context,com.game.project.GameActivity.class);
newGameActivity.putExtra(“大小”,大小);
背景。startActivity(新游戏活动);
}
}
});
返回视图;
}
@凌驾
public void destructionItem(@NonNull视图组容器,int位置,@NonNull对象){
container.removeView((视图)对象);
}
}

您可以为适配器中实例化的每个项目重新分配按钮。 您必须以以下方式参照按钮:

@NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, final int position) {
        layoutInflater = LayoutInflater.from(context);
        View view = null;

        ImageView imageView;
        TextView title, desc;
        imageView = view.findViewById(R.id.gameModeImage);
        title = view.findViewById(R.id.title);
        desc = view.findViewById(R.id.description);
        imageView.setImageResource(models.get(position).getImage());
        title.setText(models.get(position).getTitle());
        desc.setText(models.get(position).getDescription());
        final Button mapSize = view.findViewById(R.id.mapSizeBtn);

        mapSize.setText("hello2"); //here works

        mapSize.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mapSize.setText("hello"); //here does not work
            }
        });
        container.addView(view, 0);

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "This page was clicked: " + position);
                    if (position != 1)
                        Toast.makeText(context, "Coming Soon.", Toast.LENGTH_SHORT).show();
                    else {
                        Intent newGameActivity = new Intent(context, com.game.project.GameActivity.class);
                        newGameActivity.putExtra("size", size);
                        context.startActivity(newGameActivity);
                    }
                }
        });


        return view;
    }

实例化项中的所有项都应声明为最终项才能正常工作