Проблема в просмотре в custom-listview в Android - PullRequest
0 голосов
/ 20 октября 2019

Я хотел показать несколько изображений из папки на мобильной SD-карте. Я написал адаптер для отображения изображения и имени файла.

К сожалению, приложение не отображает список. Что не так с кодом, пожалуйста, помогите мне.

Это просмотр списка

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </ListView>

</LinearLayout>

Это моя строка для отображения в списке

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="15dp"
        app:srcCompat="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="307dp"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="73dp"
        android:layout_marginTop="25dp"
        android:text="TextView" />

</RelativeLayout>

Мой код MainActivity

public class MainActivity extends AppCompatActivity{

    final String str = Environment.getExternalStorageDirectory().getAbsolutePath()+"/WhatsApp/Media/.Statuses";
    File f = new File(str);
    ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        File[] files = listFiles();
        String[] fileNames = new String[files.length];
        String[] filePaths = new String[files.length];

        for(int i=0;i<files.length;i++){
            fileNames[i]=files[i].getName();
            filePaths[i]=files[i].getAbsolutePath();
        }

        System.out.println("files::: " + files.length);
        System.out.println("fileNamesfileNames::: " + fileNames.length);
        System.out.println("filePathsfilePaths::: " + filePaths.length);


        listView = (ListView) findViewById(R.id.listview);
        MyAdapter adapter = new MyAdapter(this,fileNames,filePaths);
        listView.setAdapter(adapter);
    }

    public File[] listFiles() {
        try {
            return f.listFiles(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
                    return name.endsWith(".jpg");
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

class MyAdapter extends BaseAdapter{

    Context context;
    String[] rFiles;
    String[] rPaths;

    private static LayoutInflater inflater = null;

    MyAdapter(Context ctx,String[] fileNames,String[] filePaths){
        context = ctx;
        rFiles = fileNames;
        rPaths = filePaths;
        inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return 0;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }


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

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        View vi = view;
        if(view==null){
            vi = inflater.inflate(R.layout.row,null);
        }
        ImageView images  = vi.findViewById(R.id.imageView);
        TextView textView  = vi.findViewById(R.id.textView);


        Bitmap bmp = BitmapFactory.decodeFile(rPaths[position]);
        images.setImageBitmap(bmp);
        textView.setText(rFiles[position]);

        System.out.println(vi);

        return vi;
    }
}

Файлы читаются, но ... список не отображается ... Пожалуйста, помогите мне с этим.

Ответы [ 2 ]

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

Проверьте, добавляете ли вы разрешение пользователя

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Также проверьте с помощью Log.e("files",files.length); print, равен ли ваш массив файлов нулю или нет.

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

Ошибка существует здесь -

@Override
    public int getCount() {
        return 0;
    }

Вы должны вернуть размер вашего списка, например -

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

А также -

@Override
    public Object getItem(int position) {
        return rFiles[position];
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...