首页 > 解决方案 > 设置视图寻呼机 id 以显示视图寻呼机组

问题描述

尝试设置 id 以编程方式查看寻呼机时,应用程序会出现转换错误。如果不以编程方式设置 id,则只能看到第一个视图寻呼机内容。如何以编程方式创建视图寻呼机,它可以在另一个下方显示视图寻呼机?我正在尝试将视图寻呼机添加到 xml 的线性布局中。一旦我将 setId 用于视图寻呼机,它就会崩溃。它甚至不去片段的 onCreateView。那么它指的是哪个 TextView 呢?

    java.lang.ClassCastException: android.widget.TextView cannot be cast to android.view.ViewGroup
        at androidx.fragment.app.FragmentTransition.configureTransitionsOrdered(FragmentTransition.java:314)
        at androidx.fragment.app.FragmentTransition.startTransitions(FragmentTransition.java:138)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1862)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1820)
        at androidx.fragment.app.FragmentManagerImpl.execSingleAction(FragmentManagerImpl.java:1695)
        at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:299)
        at androidx.fragment.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:256)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1244)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
        at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
        at android.view.View.measure(View.java:22071)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
        at android.view.View.measure(View.java:22071)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
        at android.view.View.measure(View.java:22071)
        at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1308)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at android.widget.ScrollView.onMeasure(ScrollView.java:350)
        at android.view.View.measure(View.java:22071)
        at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
        at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
        at android.view.View.measure(View.java:22071)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
        at android.view.View.measure(View.java:22071)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
        at android.view.View.measure(View.java:22071)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at android.view.View.measure(View.java:22071)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
        at android.view.View.measure(View.java:22071)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at com.android.internal.policy.DecorView.onMeasure(DecorView.java:724)
        at android.view.View.measure(View.java:22071)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2422)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1504)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1761)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1392)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6752)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
        at android.view.Choreographer.doCallbacks(Choreographer.java:723)
        at android.view.Choreographer.doFrame(Choreographer.java:658)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

主要活动

 private fun createviewpagers(listOfQuestionnaire: List<Questionnaire>) {
        for (i in 0 until listOfQuestionnaire.size) {
            var viewPager = ViewPager(context)
            viewPager.id = View.generateViewId()
            viewpagerAdapter= ProgramQuestionAnswerActivityAdapter(supportFragmentManager,listOfQuestionnaire.get(i))
            viewPager.setClipToPadding(false)
            viewPager.setPadding(70, 0, 70, 0)
            viewPager.setPageMargin(40)
           viewPager.setOffscreenPageLimit(8)
            viewgroupmain.addView(viewPager)
            viewPager.adapter= viewpagerAdapter;

        }
    }

程序问题答案活动适配器

public class ProgramQuestionAnswerActivityAdapter extends FragmentStatePagerAdapter {
int mCurrentPosition;
Questionnaire activitiesList;

    public ProgramQuestionAnswerActivityAdapter(FragmentManager fm, Questionnaire activities) {
        super(fm);
        activitiesList = activities;
    }

    @Override
    public int getCount() {
            return activitiesList.getQuestions().getData().size();
    }

    @Override
    public Fragment getItem(int position) {
        QuestionnaireQuestions questionanswer = activitiesList.getQuestions().getData().get(position);
        mCurrentPosition = position;
        return ProgramQuestionAnswerFragment.newInstance(activitiesList.getName(),questionanswer, position, activitiesList.getQuestions().getData().size());
    }
}

程序问题答案片段

public class ProgramQuestionAnswerFragment extends Fragment implements TimePickerDialogViewInterface {
    @BindView(R.id.viewgroup)
    LinearLayout mainparentviewgroup;
    @BindView(R.id.textCurrentQuestionnumber)
    TextView textCurrentQuestionnumber;
    @BindView(R.id.ivnext)
    ImageView tvnext;
    @BindView(R.id.ivback)
    ImageView tvback;

    Context context;
    QuestionnaireQuestions acttivities;
    private int pos, size;
    private String name;
    private Unbinder unbinder;
    List<QuestionnaireAnswer> selectedanswer = new ArrayList<>();
    private Integer timeclicked = 0;
    TextView txtTime;
    private SimpleDateFormat displayableTimeFormatter = new SimpleDateFormat("HH:mm", Locale.getDefault());

    public static ProgramQuestionAnswerFragment newInstance(String name, QuestionnaireQuestions activities, int position, int activitiesListsize) {
        ProgramQuestionAnswerFragment f = new ProgramQuestionAnswerFragment();
        Bundle b = new Bundle();
        b.putSerializable("activities", new Gson().toJson(activities));
        b.putInt("pos", position);
        b.putString("name", name);
        b.putInt("size", activitiesListsize);
        f.setArguments(b);
        return f;
    }

    @Override
    public void onAttach(Context _context) {
        super.onAttach(_context);
        if (_context instanceof Activity) {
            context = _context;
        }
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Log.e(" on create ", "view");
       View view = inflater.inflate(R.layout.programme_questionnaire_group, container, false);

        acttivities = new Gson().fromJson(getArguments().getString("activities"), QuestionnaireQuestions.class);
        pos = getArguments().getInt("pos");
        size = getArguments().getInt("size");
        name =  getArguments().getString("name");

        unbinder = ButterKnife.bind(this, view);
        mainparentviewgroup.setTag(0);

        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        if (acttivities != null) {
            if (acttivities.getQuestionTypeId()==( SINGLE_ANSWER_QUESTION_TYPE_ID)) {
                createFreeTextQuestionAnswer(acttivities);
            } 
        }
    }


private void createFreeTextQuestionAnswer(QuestionnaireQuestions activities) {
    LayoutInflater vi = (LayoutInflater) getActivity().getSystemService(getActivity().LAYOUT_INFLATER_SERVICE);
    View itemView = vi.inflate(R.layout.programme_question_free_text_layout, mainparentviewgroup, false);

    TextView txtTitle = itemView.findViewById(R.id.tvtitle);
    TextView txtBody = itemView.findViewById(R.id.tvbody);

    txtTitle.setText(name);
    txtBody.setText(activities.getQuestion());
    mainparentviewgroup.addView(itemView);
}

R.layout.programme_questionnaire_group

version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/rel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <androidx.cardview.widget.CardView
        android:id="@+id/card"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        card_view:cardBackgroundColor="@color/text"
        card_view:cardCornerRadius="6dp">

        <!--YOUR CONTENT-->
        <RelativeLayout
            android:id="@+id/rv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <LinearLayout
                android:id="@+id/viewgroup"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

            </LinearLayout>


            <RelativeLayout
                android:id="@+id/relnex"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/viewgroup"
                android:layout_alignParentBottom="true"
                android:layout_gravity="bottom"
                android:layout_weight="1"
                android:background="@color/white"
                android:gravity="bottom"
                android:paddingTop="14dp">

                <TextView
                    android:id="@+id/textCurrentQuestionnumber"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerHorizontal="true"
                    android:layout_marginBottom="5dp"
                    android:gravity="center_horizontal"
                    android:textColor="@color/lightGreyText"
                    android:textSize="18sp" />

                <!--<TextView-->
                <!--android:id="@+id/tvnext"-->
                <!--android:layout_width="wrap_content"-->
                <!--android:layout_height="wrap_content"-->
                <!--android:layout_alignParentRight="true"-->
                <!--android:layout_marginTop="5dp"-->
                <!--android:layout_marginRight="22dp"-->
                <!--android:drawableRight="@drawable/right_arrow"-->
                <!--android:drawableTint="@color/black"-->
                <!--android:drawablePadding="2dp"-->
                <!--android:fontFamily="sans-serif"-->
                <!--android:letterSpacing="0.0"-->
                <!--android:text="NEXT"-->
                <!--android:textColor="#3a98e4"-->
                <!--android:textSize="13sp"-->
                <!--android:textStyle="bold"-->
                <!--android:visibility="gone" />-->

            </RelativeLayout>

            <ImageView
                android:id="@+id/ivnext"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:padding="15dp"
                android:src="@drawable/right_arrow"
                android:tint="@color/black"
                android:visibility="gone" />

            <ImageView
                android:id="@+id/ivback"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:padding="15dp"
                android:src="@drawable/left_arrow"
                android:tint="@color/black"
                android:visibility="gone" />
        </RelativeLayout>
    </androidx.cardview.widget.CardView>
</RelativeLayout>

program_question_free_text_layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:orientation="vertical"
    android:id="@+id/linear"
    android:padding="10dp">

    <TextView
        android:id="@+id/tvtitle"
        style="@style/smallBoldText"
        android:text="my leep "
        android:textSize="15sp" />

    <TextView
        android:id="@+id/tvbody"
        style="@style/smallText"
        android:layout_marginTop="10dp"
        android:layout_gravity="left"
        android:gravity="left"
        android:text="my leep " />

    <EditText
        android:id="@+id/etfreeanswer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:hint="Type here..."
        android:gravity="top"
        android:background="@drawable/edittext_greysolid_border"
        android:minHeight="108dp" />

</LinearLayout>

标签: androidandroid-viewpager

解决方案


推荐阅读