2013-03-13 4 views
1

탭 호스트에 2 개의 프래그먼트를 추가합니다. 두 번째 프래그먼트에서 드로잉을 할 수 있습니다. 이 두 조각 사이를 전환하면 두 번째 조각의 그림이 제거됩니다. 왜 그런지 모르시겠습니까 ??조각 사이의 전환시 드로잉이 제거됩니다.

이것은 두 번째 조각입니다.

public class DrawingFragment extends BaseFragment implements android.view.View.OnClickListener { 
    private Context  context = null; 
    private Bitmap backGroundBitmap = null; 
    private DrawingViewHolder viewHolder = null; 

    /** 
    * 
    */ 
    @Override 
    public void onAttach(Activity arg0) { 
     super.onAttach(arg0); 
     this.context=arg0; 
    } 
    public DrawingFragment() { 

    } 
    public DrawingFragment(Bitmap bitmap) { 
     this.backGroundBitmap = bitmap; 
    } 
    @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.drawing_dialog, container,false); 
      viewHolder = new DrawingViewHolder(); 
      viewHolder.initUiContents(view); 
      return view; 
     } 
    /** 
    * 
    * @author Qandil 
    * 
    */ 
    private class DrawingViewHolder{ 
     private Button btnDoneDrawing  = null; 
     private Button btnEraserDrawing  = null; 
     private Button btnPencilDrawing  = null; 
     private Button btnDeleteDrawing  = null; 
     private LinearLayout llDrawingMain = null; 
     private DrawView drawingView  = null; 

     private void initUiContents(View view){ 
      btnDoneDrawing = (Button) view.findViewById(R.id.btn_drawing_done); 
      btnEraserDrawing = (Button) view.findViewById(R.id.btn_drawing_eraser); 
      btnPencilDrawing = (Button) view.findViewById(R.id.btn_drawing_pencil); 
      btnDeleteDrawing = (Button) view.findViewById(R.id.btn_drawing_delete); 
      llDrawingMain = (LinearLayout) view.findViewById(R.id.ll_drawing_dialog_main); 
      drawingView = (DrawView)view.findViewById(R.id.custom_dv2); 
      btnDoneDrawing.setOnClickListener(DrawingFragment.this); 
      btnEraserDrawing.setOnClickListener(DrawingFragment.this); 
      btnPencilDrawing.setOnClickListener(DrawingFragment.this); 
      btnDeleteDrawing.setOnClickListener(DrawingFragment.this); 
      Drawable dr = new BitmapDrawable(backGroundBitmap); 
      llDrawingMain.setBackgroundDrawable(dr); 
     } 

    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.btn_drawing_done: 
      ((CaseActivity) getActivity()).popFragments(); 
      break; 
     case R.id.btn_drawing_delete: 
      ((CaseActivity) getActivity()).popFragments(); 
      break; 

      default: 
       break; 
     } 
    } 
    /* (non-Javadoc) 
    * @see android.support.v4.app.Fragment#onDestroyView() 
    */ 
    @Override 
    public void onDestroyView() { 
     super.onDestroyView(); 
    } 


    /* (non-Javadoc) 
    * @see android.support.v4.app.Fragment#onDetach() 
    */ 
    @Override 
    public void onDetach() { 
     super.onDetach(); 
    } 
} 

drawing_dialog.xml MianActivity에서

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/ll_drawing_dialog_main" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:id="@+id/ll_drawing_dialog" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@drawable/img_draw_photo_bg" 
     android:orientation="vertical" > 

     <RelativeLayout 
      android:id="@+id/top_bar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@drawable/img_top_bar" > 

      <TextView 
       android:id="@+id/tv_draw_picture" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerInParent="true" 
       android:text="@string/tv_draw_picture" 
       android:textColor="#ffffff" 
       android:textSize="18sp" 
       android:textStyle="bold" /> 
     </RelativeLayout> 

     <LinearLayout 
      android:id="@+id/ll_header_drawing_dialog" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:background="@drawable/img_top_bar" 
      android:gravity="center" > 

      <Button 
       android:id="@+id/btn_drawing_done" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/img_drawing_done" /> 

      <Button 
       android:id="@+id/btn_drawing_eraser" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="50dp" 
       android:background="@drawable/img_drawing_eraser" /> 

      <Button 
       android:id="@+id/btn_drawing_pencil" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="50dp" 
       android:background="@drawable/img_drawing_pencil" /> 

      <Button 
       android:id="@+id/btn_drawing_delete" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="50dp" 
       android:background="@drawable/img_drawing_dlt" /> 
     </LinearLayout> 

     <RelativeLayout 
      android:id="@+id/rlt_drawing_component" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" > 
<view 
           android:id="@+id/custom_dv2" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           class="com.avhl.view.activity.DrawView" 
           android:background="#00000000" /> 
     </RelativeLayout> 
    </LinearLayout> 

</LinearLayout> 

DrawView.java

public class DrawView extends View{ 
    private Bitmap cache; 
    private Queue<PointF> points; 
    private PointF from; 
    private Context context; 
    private Paint paint ; 

    public DrawView(Context context,AttributeSet attr) { 
     super(context,attr); 
      this.context=context; 

      points = new ConcurrentLinkedQueue<PointF>(); 
      paint = new Paint(); 
      paint.setAntiAlias(true); 
      paint.setStrokeWidth(8); 
      paint.setColor(Color.GRAY); 
      paint.setDither(true);     // set the dither to true 
      paint.setStyle(Paint.Style.FILL_AND_STROKE);  // set to STOKE 
      paint.setStrokeJoin(Paint.Join.ROUND); // set the join to round you want 
      paint.setStrokeCap(Paint.Cap.ROUND);  // set the paint cap to round too 
      setFocusable(true); 
      setFocusableInTouchMode(true); 
    } 
    /*** 
    * on touch event 
    */ 
    @Override 
    public boolean onTouchEvent(MotionEvent evt) { 
     setPressed(true); 
     int pointerIndex = ((evt.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) 
       >> MotionEvent.ACTION_POINTER_ID_SHIFT); 
       int pointerId = evt.getPointerId(pointerIndex); 
     if(pointerId==0){ 
     switch (evt.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      from = new PointF(evt.getX(), evt.getY()); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      points.add(new PointF(evt.getX(), evt.getY())); 
      invalidate(); 
      break; 
     case MotionEvent.ACTION_UP: 
      break; 
     default: 
      from = null; 
     } 
     }else{ 
      return false; 
     } 
     return true; 
    } 
/** 
* 
* @param systemCanvas 
*/ 
    @Override 
    public void onDraw(Canvas systemCanvas) { 
     int w = getWidth(); 
     int h = getHeight(); 
     if (w == 0 || h == 0) 
      return; 
     if (cache == null) 
      cache = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
     // Draw on the cache 
     Canvas canvas = new Canvas(cache); 
      drawPoints(points, canvas, paint); 
     // Draw the cache with the system canvas 
     systemCanvas.drawBitmap(cache, 0, 0, paint); 
    } 

    /* 
    * for drawing line or dot 
    */ 
    private void drawPoints(Queue<PointF> points, Canvas canvas, Paint paint) { 
     if (from == null) 
      return; 
     PointF to; 
     while ((to = points.poll()) != null) { 
      canvas.drawLine(from.x, from.y, to.x, to.y, paint); 
      from = to; 
     } 

    } 
} 

나는 단순히 탭 변경에에서 ft.replace()를 호출하여 내 첫 번째 단편 DrawingFragment 탭을 교체합니다.

+0

현재 단편에 번들의 데이터를 저장하는 더 도움이 될 어렵다? –

+1

@ user2106897 신청서의 일부 코드를 게시하십시오. –

답변

1

단편의 onCreate에서 Fragment.setRetainInstance(true)으로 전화를 걸어 볼 수 있습니다. 이렇게하면 동일한 프래그먼트 인스턴스가 새 인스턴스를 만드는 대신 재사용 될 수 있습니다. 당신이 무엇을하고 있는지 보여주는 몇 가지 코드없이

, 유 다른 하나에 전환 할 때

관련 문제