android-fragments Android:片段:视图未显示

wqsoz72f  于 2022-11-14  发布在  Android
关注(0)|答案(2)|浏览(201)

我是Android开发新手。2我创建了一个视图,我想在Activity中的片段中显示它。
以下是我的观点摘录:

public class CalendarView extends View implements View.OnTouchListener {

    @Override
        protected void onDraw(Canvas canvas) {
            displayTitleDate(canvas);
            displayNavigation(canvas);
            displayDays(canvas);
            displayNumbers(canvas);
            highlightRect(canvas);
            invalidate();
        }
    }

以下是片段的摘录:

public class MyCalendarFragment extends Fragment {

    private CalendarView calendarView;

    public static MyCalendarFragment newInstance()
    {
        return new MyCalendarFragment();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        calendarView = new CalendarView(getActivity());
        return calendarView;
    }

}

最后是我的活动代码摘录:

public class EditPersonActivity extends Activity {

    private Fragment calendarFrag;
    private Fragment currentFrag;
    private FragmentTransaction fragTrans;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_edit_person);
        calendarFrag = MyCalendarFragment.newInstance();
        fragTrans = getFragmentManager().beginTransaction();
        fragTrans.add(R.id.edit_layout, calendarFrag);
        fragTrans.commit();
    }
}

我的视图没有显示出来。我想这是一个生命周期问题。我也尝试过覆盖视图中的onMeasure方法,但这并没有改变任何东西。此外,当视图嵌入到一个活动中而不是一个片段中时,它可以工作。任何帮助都是非常受欢迎的。提前感谢。

58wvjzkj

58wvjzkj1#

最后,我通过在描述片段的xml文件中直接使用自定义视图解决了我的问题。

<com.mycompany.view.CalendarView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

在实现视图的java代码中,我必须以如下方式覆盖其中一个构造函数:

public CalendarView(Context context, AttributeSet attrs) {
        super(context, attrs);
        //Other code here
}

最后,我必须重写onMeasure(...)方法:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width, height;
    Point size = new Point();
    WindowManager w = ((Activity)getContext()).getWindowManager();
    w.getDefaultDisplay().getSize(size);
    width = size.x;
    height = (int) (size.x * 1.5);
    setMeasuredDimension(width, height);
}

瞧,它起作用了,谢谢你的帮助。

x8diyxa7

x8diyxa72#

在Kotlin中,你可以替换doOnPreDraw-〉(on)-〉doOnLayout

相关问题