无法访问视图(图像视图和文本视图)

时间:2019-03-02 03:28:45

标签: android

这是我的Pageradapter

private class MyAdapter extends PagerAdapter {

            Context context;

            public MyAdapter(Context context) {
                super();
                this.context = context;
            }

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                ModelObject modelObject = ModelObject.values()[position];
                LayoutInflater inflater = LayoutInflater.from(context);
                ViewGroup layout = (ViewGroup) inflater.inflate(modelObject.getLayoutResId(), container, false);
                TextView bottomTitle = (TextView)layout.findViewById(R.id.bottom_title);
                ImageView topImageView =(ImageView) layout.findViewById(R.id.top_image_view);
                TextView topTitleTextview=(TextView)layout.findViewById(R.id.top_title_text_view);
                TextView bottomDescriptionTextView=(TextView)layout.findViewById(R.id.bottom_description_textview);
                bottomTitle.setText(pointsHelpItemDetailViewModel.getHelpItem().subtitle);
                int resId = getContext().getResources().getIdentifier(pointsHelpItemDetailViewModel.getHelpItem().image, "drawable", context.getPackageName());
                topImageView.setBackgroundResource(resId);
                topTitleTextview.setText(pointsHelpItemDetailViewModel.getHelpItem().subtitle);
                bottomDescriptionTextView.setText(pointsHelpItemDetailViewModel.getHelpItem().content);
                container.addView(layout);
                return layout;
            }

            @Override
            public void destroyItem(ViewGroup collection, int position, Object view) {
                collection.removeView((View) view);
            }

            @Override
            public int getCount() {
                return ModelObject.values().length;
            }

            @Override
            public boolean isViewFromObject(View view, Object object) {
                return view == object;
            }

            @Override
            public CharSequence getPageTitle(int position) {
                ModelObject customPagerEnum = ModelObject.values()[position];
                return context.getString(customPagerEnum.getTitleResId());
            }
        }

这是我的ModelObject

public enum ModelObject {

    RED(R.color.tesco_red, R.layout.point_help_image_view),
    BLUE(R.color.tesco_blue, R.layout.point_help_decription_view);

    private int mTitleResId;
    private int mLayoutResId;

    ModelObject(int titleResId, int layoutResId) {
        mTitleResId = titleResId;
        mLayoutResId = layoutResId;
    }

    public int getTitleResId() {
        return mTitleResId;
    }

    public int getLayoutResId() {
        return mLayoutResId;
    }
}

我在第一个布局中添加了两个布局点_ help_image_viewpoint_help_decription_view,我有一个ImageView和一个TextView,在第二个布局中,我想访问两个文本视图。

我正在尝试使用给定的代码进行访问,但是当我尝试setText时,我在null对象引用上遇到了异常java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setBackgroundResource(int)'。请帮助我如何访问页面适配器中的视图。

1 个答案:

答案 0 :(得分:0)

尝试一下

@NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, final int position) {
        ModelObject modelObject = ModelObject.values()[position];
        View itemView = LayoutInflater.from(container.getContext()).inflate(modelObject.getLayoutResId(), container, false);

        TextView bottomTitle = (TextView) itemView.findViewById(R.id.bottom_title);
        bottomTitle.setText("MARSH");

        return itemView;
    }