Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MuPDF for Android: Option for fragment instead Activity

In my existing android app, Im using MuPDF, which i ported with help of this doc. Now when i want to open pdf files inside activity i use : Uri uri = Uri.parse(path);

            Intent intent = new Intent(this, MuPDFActivity.class);
            intent.setAction(Intent.ACTION_VIEW);
            intent.setData(uri);
            startActivity(intent);

which fires a new activity, My problem is: (1) how can I start Fragment to view pdf? (2) Does MuPDF supports Fragment that I can call under my currant Android-Tab-View? (3) Is there a Way Converting this activity into fragment?

Currently i'm doing:

public class DummySectionFragment extends Fragment {

        public DummySectionFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View  rootView = null;

            rootView = inflater.inflate(R.layout.activity_dummy_section_fragment, container, false);

            Intent myIntent = new Intent(getActivity(), MuPDFActivity.class);
            myIntent.setAction(Intent.ACTION_VIEW);
            myIntent.setData(uri);
            getActivity().startActivity(myIntent); 

            return rootView;
        }
}

Which: opens a new activity on my current Tab View layout, which does not look great as it covers entire tab layout and user have to click BACK button to view tab view.

like image 923
DPP Avatar asked Jul 23 '13 06:07

DPP


2 Answers

Maybe you shouldn't use the MuPDFActivity in your project - it's just an example how Mupdf works. All what you need is the MuPDFReaderView/MuPDFCore/MuPDFPageAdapter. MuPDFReaderView extends from View/ViewGroup, so you can just add it to your layout. Try it like this (totally untested!!):

1.) XML --> The base layout for the fragment (mupdf_wrapper.xml):

<RelativeLayout
    android:id="@+id/mupdf_wrapper"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
</RelativeLayout>

2.) JAVA:

public class DummySectionFragment extends Fragment {

    public DummySectionFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View  rootView = null;

        rootView = inflater.inflate(R.layout.mupdf_wrapper, container, false);
        RelativeLayout mupdfWrapper (RelativeLayout)rootView.findViewById(R.id.mupdf_wrapper);
        String path = "path/To/Your/PDF/File.pdf";
        MuPDFCore core = new MuPDFCore(getActivity(), path);
        MuPDFReaderView mDocView = new MuPDFReaderView(getActivity());
        mDocView.setAdapter(new MuPDFPageAdapter(getActivity(), getActivity(), core));
        mupdfWrapper .addView(mDocView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
        return rootView;
    }

}

like image 86
A.D. Avatar answered Sep 22 '22 14:09

A.D.


Converting activity to fragment :

public class a extend activity{

     public void oncreate(Bundle Saveinstance)
     {
     super.oncreate(saveinstance);
     setcontentview(r.layout.xyz);
     }    
    }

Converting ... :

  public class a extend fragment{


 public void onstart()
 {
 super.onstart();

 }   

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub


    return inflater.inflate(com.example.login.R.layout.fragment, container, false);

} 
}

If you have a function or you wanna make a Toast , and you have xyz.this replace him with getActivity()

Toast.makeText(xyz.this, e.getMessage(),Toast.LENGTH_LONG).show(); 
Toast.makeText(getActivity(), e.getMessage(),Toast.LENGTH_LONG).show();
like image 27
user3411394 Avatar answered Sep 19 '22 14:09

user3411394