从手机中获取 pdf 并在 Android Studio 中以列表视图的形式显示它?

问题描述

我想从手机创建一个 pdf 阅读器,但我遇到了一个问题,即使我的手机中有 pdf 文件,它也不会在列表视图中显示任何 pdf 文件。 我知道问题出在我的主要活动中,但我不知道如何解决。请任何人帮助我。

我的主要 Activity.java

void autopreloadMoreArticles(ScrollNotification notification) {
    if (notification is ScrollUpdateNotification) {
      ScrollMetrics metrics = notification.metrics;
      double buttondistance = metrics.extentAfter;
      if (buttondistance < 800 && !isdispatched) {
        isdispatched = true;
        _loadingMoreArticle();
      }
      if (buttondistance > 800) {
        isdispatched = false;
      }
    }
  }

CustomAdapter.java 类

    package com.example.pdfreader;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.pdf.PdfDocument;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.io.File;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    FloatingActionButton floatingActionButton ;
    File directroy;


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

        floatingActionButton = findViewById(R.id.floating_button);

      
        directroy = Environment.getExternalStorageDirectory();

        final  ListView listView = findViewById(R.id.list_view);

        floatingActionButton.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                CustomAdapter customAdapter = new CustomAdapter(MainActivity.this,getPDFs(directroy));
                listView.setAdapter(customAdapter);
            }
        });

    }

    private boolean hasPermission(Context context,String readExternalStorage)
    {
        return ContextCompat.checkSelfPermission(context,readExternalStorage)== PackageManager.PERMISSION_GRANTED;
    }

    private ArrayList<PDFDocument>getPDFs(File dir)
    {
        ArrayList<PDFDocument> pdfDocuments = new ArrayList<>();

   


        if(dir.exists())
        {
            
            File[] files = dir.listFiles();

            


            if (files != null) {
                for(int i = 0; i<files.length; i++)
                {
                    if(files[i].isDirectory())
                    {
                      
                        getPDFs(files[i]);
                    }
                    else
                        {
                          if (files[i].getName().endsWith(".pdf"))
                          {
                            Toast.makeText(this,"Cursor reached here",Toast.LENGTH_SHORT).show();
                            PDFDocument pdfDoc = new PDFDocument();
                            pdfDoc.setName(files[i].getName());
                            pdfDoc.setPath(files[i].getAbsolutePath());
                            pdfDocuments.add(pdfDoc);

                          }
                         }


                }

                   
                }
            else
            {
                Toast.makeText(this,"Directory is empty..",Toast.LENGTH_SHORT).show();
            }
            }
             return pdfDocuments;
        }

    }

PDFDocument.java

package com.example.pdfreader;

import android.content.Context;
import android.content.Intent;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.io.File;
import java.util.ArrayList;

public class CustomAdapter extends BaseAdapter {
    Context context;
    ArrayList<PDFDocument> pdfDocuments;




public CustomAdapter(Context context,ArrayList<PDFDocument> pdfDocuments) {
    this.context = context;
    this.pdfDocuments = pdfDocuments;
}

@Override
public int getCount() {
    return pdfDocuments.size();
}

@Override
public Object getItem(int i) {
    return pdfDocuments.get(i);
}

@Override
public long getItemId(int i) {
    return i;
}

@Override
public View getView(int i,View view,ViewGroup viewGroup) {
    if(view == null)
    {

        view = LayoutInflater.from(context).inflate(R.layout.activity_my_list_data,viewGroup,false);

    }
    final PDFDocument pdfDocument = (PDFDocument) this.getItem(i);
    TextView nameTextView = view.findViewById(R.id.text_view);
    ImageView image = view.findViewById(R.id.imageIcon);

    // Binding of Data is going to start
    nameTextView.setText(pdfDocument.getName());
    image.setimageResource(R.drawable.pakistan);

        return view;
    }

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)