我是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方法,但这并没有改变任何东西。此外,当视图嵌入到一个活动中而不是一个片段中时,它可以工作。任何帮助都是非常受欢迎的。提前感谢。
2条答案
按热度按时间58wvjzkj1#
最后,我通过在描述片段的xml文件中直接使用自定义视图解决了我的问题。
在实现视图的java代码中,我必须以如下方式覆盖其中一个构造函数:
最后,我必须重写onMeasure(...)方法:
瞧,它起作用了,谢谢你的帮助。
x8diyxa72#
在Kotlin中,你可以替换
doOnPreDraw
-〉(on)-〉doOnLayout
。