Android:Fragment:查看未显示

时间:2014-05-03 12:02:28

标签: android android-fragments android-activity android-canvas

我是Android开发的新手。我创建了一个我希望在活动中的片段中显示的视图。

以下是我的观点摘录:

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方法,但这不会改变任何东西。此外,它在视图嵌入活动而不是片段时起作用。非常欢迎任何帮助。 Thx提前。

1 个答案:

答案 0 :(得分:0)

最后,我通过直接在描述片段的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);
}

Et瞧,它有效。谢谢你的帮助。