2016-07-13 2 views
-1

Ich versuche eine App zu erstellen, die eine PDF-Datei rendern kann, wenn jemand auf die angegebene Schaltfläche klickt. Das Problem ist, dass, wenn ich ein weiteres PDF und Fragment zum Rendern hinzufügen, die Software nur die letzte, die ich hinzugefügt habe, und nicht die anderen anzeigt. Hier ist mein Code:Mehr als ein Fragment für pdfs

Haupttätigkeit

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.view.View; 
import android.widget.LinearLayout; 

public class MainActivity extends AppCompatActivity { 

    private View btnRender; 
    private LinearLayout container; 
    private View btnRendered; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     btnRender = (View)findViewById(R.id.btn_render); 
     container = (LinearLayout)findViewById(R.id.fragment_layout); 
     btnRendered = (View) findViewById(R.id.btn_rendered); 

     //set event handling for button 
     btnRender.setOnClickListener(onClickListener()); 
     btnRendered.setOnClickListener(onClickListener()); 
    } 

    private View.OnClickListener onClickListener() { 


     return new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (v == btnRender) { 
        FragmentManager fm = getSupportFragmentManager(); 
        FragmentTransaction ft = fm.beginTransaction(); 
        ft.replace(R.id.fragment_layout, new PDFRenderFragment()); 
        ft.commit(); 
        //gone button after all 
        btnRender.setVisibility(View.GONE); 
        container.setVisibility(View.VISIBLE); 
       } else if (v == btnRendered) { 
         FragmentManager fm = getSupportFragmentManager(); 
         FragmentTransaction ft = fm.beginTransaction(); 
         ft.replace(R.id.fragment_layout, new PDFRenderAgment()); 
         ft.commit(); 

         //gone button after all 
         btnRender.setVisibility(View.GONE); 
         container.setVisibility(View.VISIBLE); 


      } 
     }; 
    }; 



}} 

Erste pdf-Datei

import android.app.Fragment; 
import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.pdf.PdfRenderer; 
import android.os.Bundle; 
import android.os.ParcelFileDescriptor; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.ImageView; 

import java.io.IOException; 


public class PDFRenderFragment extends android.support.v4.app.Fragment { 

    private ParcelFileDescriptor fileDescriptor; 
    private PdfRenderer pdfRenderer; 
    private PdfRenderer.Page currentPage; 
    private ImageView image; 
    private Button btnPrevious; 
    private Button btnNext; 

    public PDFRenderFragment() { 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_pdfrender, container, false); 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     // Retain view references. 
     image = (ImageView) view.findViewById(R.id.image); 
     btnPrevious = (Button) view.findViewById(R.id.btn_previous); 
     btnNext = (Button) view.findViewById(R.id.btn_next); 

     //set buttons event 
     btnPrevious.setOnClickListener(onActionListener(-1)); //previous button clicked 
     btnNext.setOnClickListener(onActionListener(1)); //next button clicked 

     int index = 0; 
     // If there is a savedInstanceState (screen orientations, etc.), we restore the page index. 
     if (null != savedInstanceState) { 
      index = savedInstanceState.getInt("current_page", 0); 
     } 
     showPage(index); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      openRenderer(activity); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      Log.i("Fragment", "Error occurred!"); 
      Log.e("Fragment", e.getMessage()); 
      activity.finish(); 
     } 
    } 

    @Override 
    public void onDestroy() { 
     try { 
      closeRenderer(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     super.onDestroy(); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     if (null != currentPage) { 
      outState.putInt("current_page", currentPage.getIndex()); 
     } 
    } 

    /** 
    * Create a PDF renderer 
    * @param activity 
    * @throws IOException 
    */ 
    private void openRenderer(Activity activity) throws IOException { 
     // Reading a PDF file from the assets directory. 
     fileDescriptor = activity.getAssets().openFd("biology_in_c.pdf").getParcelFileDescriptor(); 

     // This is the PdfRenderer we use to render the PDF. 
     pdfRenderer = new PdfRenderer(fileDescriptor); 
    } 

    /** 
    * Closes PdfRenderer and related resources. 
    */ 
    private void closeRenderer() throws IOException { 
     if (null != currentPage) { 
      currentPage.close(); 
     } 
     pdfRenderer.close(); 
     fileDescriptor.close(); 
    } 

    /** 
    * Shows the specified page of PDF file to screen 
    * @param index The page index. 
    */ 
    private void showPage(int index) { 
     if (pdfRenderer.getPageCount() <= index) { 
      return; 
     } 
     // Make sure to close the current page before opening another one. 
     if (null != currentPage) { 
      currentPage.close(); 
     } 
     //open a specific page in PDF file 
     currentPage = pdfRenderer.openPage(index); 
     // Important: the destination bitmap must be ARGB (not RGB). 
     Bitmap bitmap = Bitmap.createBitmap(currentPage.getWidth(), currentPage.getHeight(), 
       Bitmap.Config.ARGB_8888); 
     // Here, we render the page onto the Bitmap. 
     currentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY); 
     // showing bitmap to an imageview 
     image.setImageBitmap(bitmap); 
     updateUIData(); 
    } 

    /** 
    * Updates the state of 2 control buttons in response to the current page index. 
    */ 
    private void updateUIData() { 
     int index = currentPage.getIndex(); 
     int pageCount = pdfRenderer.getPageCount(); 
     btnPrevious.setEnabled(0 != index); 
     btnNext.setEnabled(index + 1 < pageCount); 
     getActivity().setTitle(getString(R.string.app_name , index + 1, pageCount)); 
    } 

    private View.OnClickListener onActionListener(final int i) { 
     return new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if (i < 0) {//go to previous page 
        showPage(currentPage.getIndex() - 1); 
       } else { 
        showPage(currentPage.getIndex() + 1); 
       } 
      } 
     }; 
    } 
} 

Zweite pdf-Datei

import android.app.Fragment; 
import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.pdf.PdfRenderer; 
import android.os.Bundle; 
import android.os.ParcelFileDescriptor; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.ImageView; 

import java.io.IOException; 


public class PDFRenderAgment extends android.support.v4.app.Fragment { 

    private ParcelFileDescriptor fileDescriptor; 
    private PdfRenderer pdfRenderer; 
    private PdfRenderer.Page currentPage; 
    private ImageView image; 
    private Button btnPrevious; 
    private Button btnNext; 

    public PDFRenderAgment() { 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_pdfrender, container, false); 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     // Retain view references. 
     image = (ImageView) view.findViewById(R.id.image); 
     btnPrevious = (Button) view.findViewById(R.id.btn_previous); 
     btnNext = (Button) view.findViewById(R.id.btn_next); 

     //set buttons event 
     btnPrevious.setOnClickListener(onActionListener(-1)); //previous button clicked 
     btnNext.setOnClickListener(onActionListener(1)); //next button clicked 

     int index = 0; 
     // If there is a savedInstanceState (screen orientations, etc.), we restore the page index. 
     if (null != savedInstanceState) { 
      index = savedInstanceState.getInt("current_page", 0); 
     } 
     showPage(index); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      openRenderer(activity); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      Log.i("Fragment", "Error occurred!"); 
      Log.e("Fragment", e.getMessage()); 
      activity.finish(); 
     } 
    } 

    @Override 
    public void onDestroy() { 
     try { 
      closeRenderer(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     super.onDestroy(); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     if (null != currentPage) { 
      outState.putInt("current_page", currentPage.getIndex()); 
     } 
    } 

    /** 
    * Create a PDF renderer 
    * @param activity 
    * @throws IOException 
    */ 
    private void openRenderer(Activity activity) throws IOException { 
     // Reading a PDF file from the assets directory. 
     fileDescriptor = activity.getAssets().openFd("biology_in_f.pdf").getParcelFileDescriptor(); 

     // This is the PdfRenderer we use to render the PDF. 
     pdfRenderer = new PdfRenderer(fileDescriptor); 
    } 

    /** 
    * Closes PdfRenderer and related resources. 
    */ 
    private void closeRenderer() throws IOException { 
     if (null != currentPage) { 
      currentPage.close(); 
     } 
     pdfRenderer.close(); 
     fileDescriptor.close(); 
    } 

    /** 
    * Shows the specified page of PDF file to screen 
    * @param index The page index. 
    */ 
    private void showPage(int index) { 
     if (pdfRenderer.getPageCount() <= index) { 
      return; 
     } 
     // Make sure to close the current page before opening another one. 
     if (null != currentPage) { 
      currentPage.close(); 
     } 
     //open a specific page in PDF file 
     currentPage = pdfRenderer.openPage(index); 
     // Important: the destination bitmap must be ARGB (not RGB). 
     Bitmap bitmap = Bitmap.createBitmap(currentPage.getWidth(), currentPage.getHeight(), 
       Bitmap.Config.ARGB_8888); 
     // Here, we render the page onto the Bitmap. 
     currentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY); 
     // showing bitmap to an imageview 
     image.setImageBitmap(bitmap); 
     updateUIData(); 
    } 

    /** 
    * Updates the state of 2 control buttons in response to the current page index. 
    */ 
    private void updateUIData() { 
     int index = currentPage.getIndex(); 
     int pageCount = pdfRenderer.getPageCount(); 
     btnPrevious.setEnabled(0 != index); 
     btnNext.setEnabled(index + 1 < pageCount); 
     getActivity().setTitle(getString(R.string.app_name , index + 1, pageCount)); 
    } 

    private View.OnClickListener onActionListener(final int i) { 
     return new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if (i < 0) {//go to previous page 
        showPage(currentPage.getIndex() - 1); 
       } else { 
        showPage(currentPage.getIndex() + 1); 
       } 
      } 
     }; 
    } 
} 

Es gibt keine Syntaxfehler im Programm, was zu der Annahme führt, dass es eine logische Erklärung geben muss, warum das nicht funktioniert. Wenn jemand helfen könnte, wäre das sehr geschätzt!

bearbeiten aufgrund erste Antwort

Diese Antwort nicht mein Problem lösen, noch das letzte Fragment

erschien

Antwort

0

Haben Sie versucht, mit diesen: public void onClick (Blick v) { Schalter (v.getId()) {

case R.id.btn_render: 
    // do your code 
    break; 

case R.id.btn_rendered: 
    // do your code 
    break; 
default: 
    break; 

}}

+0

Ich habe den Standard nicht hinzugefügt ... macht das einen Unterschied? – Desthstro

+0

es funktioniert nicht .. leider – Desthstro