2017-03-22 15 views
0

私は、RelativeLayoutとImageViewを持つフラグメントを持っています。 Androidフラグメントの空白

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/pagelayout" 
android:layout_below="@layout/toolbar" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:background="@color/aqua_blue" 
tools:context="MainActivityFragment"> 

<ImageView 
    android:id="@+id/pdfImage" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/white" 
    android:adjustViewBounds="true" 
    android:scaleType="fitStart"/> 

私は次のようにonViewCreatedの画像ビューの画像と表示としてpdfpageをレンダリングします。

pageLayout = (RelativeLayout) rootView.findViewById(R.id.pagelayout); 
    //Retain view references. 
    mImageView = (ImageView) rootView.findViewById(R.id.pdfImage);   

    // Show the first page by default. 
    mCurrentPageNum = pdfRenderer.getmCurrentPageNum(); 
    if (mCurrentPageNum == 0) { 
     mCurrentPageNum = 1; 
     pdfRenderer.setmCurrentPageNum(mCurrentPageNum); 
    } 
    showPage(mCurrentPageNum, true, this.activity); 

    //get screen size 
    DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
    scrwidth = metrics.widthPixels; 
    scrheight = pdfRenderer.getPDFImage().getHeight(); 

    pageControlsList = pdfRenderer.GetPageControls(); 
    if (pageControlsList != null) { 
     if (pageControlsList.size() > 0) { 
      generateControls(); 
      showPage(mCurrentPageNum, true, this.activity); 
     } 
    } 

場合はページ上のユーザーのスワイプ、私は、次のページまたは前のページに移動します。そのために、私はMainactivityの断片で書かれた次の関数を呼び出すことになります。

public void Readpage(int index, boolean PdfReload, Activity activity) 
{ 
    //context=activity; 
    //pageLayout = (RelativeLayout) rootView.findViewById(R.id.pagelayout); 
    //mImageView = (ImageView) rootView.findViewById(R.id.pdfImage); 
    showPage(index, true, activity); 
    pageControlsList = pdfRenderer.GetPageControls(); 
    if (pageControlsList != null) { 
     generateControls();    
    } 
} 

Generatecontrolsメソッドは、ページにコントロールがあり、動的に生成された場合に呼び出されます。コードは次のとおりです(サンプルのコントロールは1つだけです)。

public void generateControls() { 
    //iterate loop to create each control 
     for (Map.Entry<Integer, PageElement> ctrl : pageControlsList.entrySet()) { 
      Integer ctrlKey = ctrl.getKey(); 
      PageElement pageField = ctrl.getValue(); 
      String name = pageField.getName(); 
      int type = pageField.getType(); 


      int pdfw = (int) pdfRenderer.getPage_width(); 
      int pdfh = (int) pdfRenderer.getPage_height(); 

      //get dimensions of the control 
      int left = (int) pageField.getLeft(); 
      int top = (int) pageField.getTop(); 
      int right = (int) pageField.getRight(); 
      int bottom = (int) pageField.getBottom(); 
      int width = (int) pageField.getWidth(); 
      int height = (int) pageField.getHeight(); 

      //calculate dimensions w.r.t. screen size 
      int ctrlW = scrwidth * width/pdfw; 
      int ctrlH = scrheight * height/pdfh; 
      int ctrlLeft = (int) (scrwidth * left)/pdfw; 
      int ctrlTop = (int) (((scrheight * (pdfh - top))/pdfh)); 
      int ctrlRight = (int) (scrwidth * right)/pdfw; 
      int ctrlBottom = (int) (scrheight * bottom/pdfh); 

      //set dimensions of the control with layout parameters 
      RelativeLayout.LayoutParams ctrllp = new RelativeLayout.LayoutParams(ctrlW, ctrlH); 
      ctrllp.setMargins(ctrlLeft, ctrlTop, 0, 0); 


      //generate controls based on the type of control 
      if (type == 2) { //checkbox 
       CheckBox myChkBox = new CheckBox(context); 
       myChkBox.setId(ctrlKey); 
       myChkBox.setFocusable(false); 
       myChkBox.setEnabled(false); 
       if (pageField.ExportValue().contains("Off")) 
        myChkBox.setChecked(false); 
       else 
        myChkBox.setChecked(true); 

       pageLayout.setLayoutParams(ctrllp); 
       pageLayout.addView(myChkBox, ctrllp); 
} 

最初のページにコントロールが含まれていても正しく動作します。他のページにコントロールが含まれているとスワイプすると、空白のフラグメントしか見ることができません。コントロールがなければ、私は完璧に動作しているすべてを見ることができます。私は多くの方法を試みたが、私のために働いた人はいなかった助けてください。

答えて

0

いくつかの後にR & D私のコードで問題が見つかりました。 Fragmentではなく、メインアクティビティにコードを記述するだけです。アクティビティではなくフラグメントでコントロールをレンダリングします。

//to display page controls during appload 
    pageControlsList = pdfRenderer.GetPageControls(); 
    if (pageControlsList != null) { 
     if (pageControlsList.size() > 0) { 
      generateControls(); 
      //fillDefaultDocControls(); 
      mfrg.showPage(pdfRenderer.getmCurrentPageNum(), true, this); 
     } 
    } 

コントロールを生成し、そのページを表示するためにフラグメントを呼び出すだけです。

関連する問題