Мне нужно открыть файл PDF, когда кнопка просмотра карты нажата, и каждая карта имеет свой собственный PDF против - PullRequest
0 голосов
/ 30 октября 2019

Вот мой файл Orderofday.java, где я получаю данные с URL-адреса, а в строке Stringroueding_file я получаю ссылку в формате PDF. я показал данные, присутствующие на каждой карточке, но не смог открыть ссылку PDF на нажатой кнопке карточки.

public class Orderofday extends AppCompatActivity {

    private static final String TAG = Orderofday.class.getSimpleName();

    private RecyclerView recyclerView;
    private OrderList mAdapter;

    ProgressDialog progess;

    List<OrdersModel> myList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_orderofday);
        progess = new ProgressDialog(Orderofday.this);
        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        mAdapter = new OrderList(myList, Orderofday.this);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(mAdapter);
        getResult();
    }

    public void getResult() {
        String url = "http://senate.gov.pk/ne/getdata/order_of_day_json.php";

        //detect internet and show the data
        if (isNetworkStatusAvialable(getApplicationContext())) {
            progess.setMessage("Loading data....");
            progess.show();
            StringRequest strReq = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {


                @Override
                public void onResponse(String response) {
                    Log.d("response", response);
                    try {
                        JSONObject mainList = new JSONObject(response);
                        JSONArray result = mainList.getJSONArray("data");
                        if (result.length() > 0) {
                            for (int i = 0; i < result.length(); i++) {
                                mainList = result.getJSONObject(i);
                                OrdersModel model = new OrdersModel();
                                model.title_en = mainList.getString("title_en");
                                model.YearID = mainList.getString("YearID");
                                model.session_title_en = mainList.getString("session_title_en");
                                model.sitting_date = mainList.getString("sitting_date");
                                model.proceeding_file = mainList.getString("proceeding_file");
                                myList.add(model);
                            }
                            mAdapter.notifyDataSetChanged();
                            progess.dismiss();
                        } else {
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d(TAG, "Error: " + error.getMessage());
                    progess.dismiss();
                }
            });
            Log.d("params", strReq.getUrl() + " and " + strReq.getBodyContentType() + " abd " + strReq.getBodyContentType());
            // Adding String request to request queue
            AppSingleton.getInstance(getApplicationContext()).addToRequestQueue(strReq, TAG);
        } else {
            Toast.makeText(getApplicationContext(), "Please check your Internet Connection", Toast.LENGTH_SHORT).show();
        }
    }

    //check internet connection
    public static boolean isNetworkStatusAvialable(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivityManager != null) {
            NetworkInfo netInfos = connectivityManager.getActiveNetworkInfo();
            if (netInfos != null) {
                return netInfos.isConnected();
            }
        }
        return false;
    }
}

Вот мой класс OrderList.java, где я устанавливаю текст из OderModel.java

public class OrderList extends RecyclerView.Adapter<OrderList.MyViewHolder> {

    List<OrdersModel> list;
    Context c;

    public OrderList(List<OrdersModel> list, Context c) {

        this.list = list;
        this.c = c;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.orders_list, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {

        OrdersModel movie = list.get(position);
        holder.name.setText(movie.gettitle_en());
        holder.type.setText(movie.getYearID());
        holder.session_title.setText((movie.getsession_title_en()));
        holder.sitting_date.setText(movie.getsitting_date());
    }


    @Override
    public int getItemCount() {
        return list.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView name, type , session_title , sitting_date , proceeding_file;
        public MyViewHolder(View view) {
            super(view);
            name = view.findViewById(R.id.name);
            type = view.findViewById(R.id.type);
            session_title = view.findViewById(R.id.session_title);
            sitting_date = view.findViewById(R.id.sitting_date);
        }
    }
}

А вот мой OrderModel.java, где я сделал геттеры и сеттеры

public class OrdersModel {

    String title_en;
    String YearID;
    String session_title_en;
    String sitting_date;
    String proceeding_file;


    public String gettitle_en() {
        return title_en;
    }
    public void settitle_en(String title_en) {
        this.title_en = title_en;
    }


    public String getYearID() {
        return YearID;
    }
    public void setYearID(String YearID) {
        this.YearID = YearID;
    }


    public String getsession_title_en() {
        return session_title_en;
    }
    public void setsession_title_en(String session_title_en) {
        this.session_title_en = session_title_en;
    }


    public String getsitting_date() {
        return sitting_date;
    }
    public void setsitting_date(String session) {
        this.sitting_date = sitting_date;
    }


    public String getproceeding_file() {
        return proceeding_file;
    }
    public void setproceeding_file(String date) {
        this.proceeding_file = proceeding_file;
    }

    String file;
}

Теперь мне нужно открыть PDF-файл для каждого клика по просмотру карты, я получил URL-адрес pdf в процедуре_файла (Строка) но не смог получить. Пожалуйста, помогите мне добиться этого, и вот XML.

<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_margin="@dimen/_5sdp"
    android:layout_height="wrap_content"
    android:padding="10dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/name"
            android:textStyle="bold"
            android:textSize="20sp"
            android:layout_margin="5dp"
            android:text="Title_ID"
            android:textColor="@android:color/black" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/type"
            android:layout_below="@id/name"
            android:layout_margin="5dp"
            android:textSize="15sp"
            android:text="YearID"
            android:textColor="@android:color/black" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/session_title"
            android:layout_below="@id/type"
            android:layout_margin="5dp"
            android:textSize="15sp"
            android:text="Session Title"
            android:textColor="@android:color/black" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/sitting_date"
            android:layout_below="@id/session_title"
            android:layout_margin="5dp"
            android:textSize="15sp"
            android:text="Date "
            android:textColor="@android:color/black" />

        <Button
            android:id="@+id/view_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/sitting_date"
            android:layout_alignParentRight="true"
            android:text="Click to View Pdf"
            android:textColor="#000000"
            android:textSize="@dimen/_10sdp">
        </Button>

        <com.github.barteksc.pdfviewer.PDFView
            android:id="@+id/pdfView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    </RelativeLayout>

</androidx.cardview.widget.CardView>

Ответы [ 4 ]

0 голосов
/ 30 октября 2019
  1. инициализировать кнопку view_pdf в классе MyViewHolder. как другие.

  2. синтаксический анализ файла, как другие

      holder.proceeding_file.setOnClickListener(new View.OnClickListener() {
    
      @Override
      public void onClick(View view) {
    
            String pdf_url = movie.getproceeding_file();
            // do not forget to concate preceding url of the pdf
            Webview webView = (WebView) findViewById(R.id.webView1);
            webView.getSettings().setJavaScriptEnabled(true);
            webView.loadUrl(pdf_url);
    
          }
       });
    
0 голосов
/ 30 октября 2019

Инициализируйте viewButton в ViewHolder.

public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView name, type , session_title , sitting_date , proceeding_file;
    public Button viewButton;

    public MyViewHolder(View view) {
        super(view);
        name = view.findViewById(R.id.name);
        type = view.findViewById(R.id.type);
        session_title = view.findViewById(R.id.session_title);
        sitting_date = view.findViewById(R.id.sitting_date);
        viewButton = view.findViewById(R.id.view_button);
    }
}

Затем установите onClickListener на viewButton и openPdf

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {

    OrdersModel movie = list.get(position);
    holder.name.setText(movie.gettitle_en());
    holder.type.setText(movie.getYearID());
    holder.session_title.setText((movie.getsession_title_en()));
    holder.sitting_date.setText(movie.getsitting_date());

    holder.viewButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            openPdf(movie.getproceeding_file())
        }
    });
}

Предложение: Вы должны двигатьсяваш PdfViewer в другой деятельности и перенаправить пользователя на эту деятельность, когда нажмите viewButton.

0 голосов
/ 30 октября 2019

Над ответом правильный. Однако лучшее и самое правильное решение - создать интерфейс для clicklistenet и внедрить его в тур-активность

0 голосов
/ 30 октября 2019

Когда нажата кнопка открытия pdf

Загрузить файл pdf в определенном месте

показать индикатор выполнения .....

разрешить загрузку завершено.

скрыть индикатор прогресса!

открыть pdf из скачанного местоположения. используйте ниже фрагмент:

File file = new
File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath() + File.separator +
        "YOUR FILE NAME");
Uri path = Uri.fromFile(file);
Log.i("Fragment2", String.valueOf(path));
Intent pdfOpenintent = new Intent(Intent.ACTION_VIEW);
pdfOpenintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
pdfOpenintent.setDataAndType(path, "application/pdf");
try {
    this.startActivity(pdfOpenintent);
} catch (ActivityNotFoundException e) {

}
...