私は3つのタブのタブレイアウトからなるアクティビティを持っています。各タブはフラグメントであり、それらのすべてにはさまざまなpdfファイルを表示するpdfビューが含まれています。非同期クラスからフラグメントのビューにアクセスするには?
私はPdf Viewer用のクラスを作成しました。その断片の中でpdfファイルを開くために、そのクラスを多数のフラグメントで呼び出す必要があります。しかし、私はコンテキストを適切に渡すことができず、そのフラグメントのPDFviewにアクセスできません。私はPDFviewerとしてC.pdfviewer.PDFViewを使用しています。ここで
は私のコードです:
MyFragment.class
public class MyFragment extends Fragment {
PDFView pdfView;
String url = "mysite.pdf";
public MyFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_myfragment, container, false);
pdfView = (PDFView)view.findViewById(R.id.pdfViewer);
new RetrievePDFStream(this).execute(url);
return view;
}
}
RetrievePDFStream.class
public class RetrievePDFStream extends AsyncTask<String, Void, byte[]> {
public Fragment fContext;
PDFView pdfView;
public RetrievePDFStream(Fragment fContext) {
this.fContext = fContext;
}
@Override
protected byte[] doInBackground(String... strings) {
InputStream inputStream = null;
try {
URL url = new URL(strings[0]);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
if (urlConnection.getResponseCode() == 200) {
inputStream = new BufferedInputStream(urlConnection.getInputStream());
}
} catch (IOException ex) {
return null;
}
try {
return IOUtils.toByteArray(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(byte[] inputStream) {
View view = fContext.getView();
pdfView = (PDFView)view.findViewById(R.id.pdfViewer);
pdfView.fromBytes(inputStream).load();
}
}
MyFragment.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="app.nvest.helpinsure.Fragment.MyFragment"
android:orientation="vertical"
android:background="#000000">
<com.github.barteksc.pdfviewer.PDFView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/pdfViewer"/>
</LinearLayout>
にあなたASYCコードを変更するには、私はすでにそれを試してみました。それは動作しませんでした – vinitpradhan18
getActivity()。getBaseContext()。実行(URL)。それでも助けにならない場合は、ログを投稿してください – Zoffa