Возникли проблемы с отображением видео в макете GridView?

Я хочу показать мою конкретную папку vedios в макете GridView.

Но я получаю черные элементы в макете GridView Снимок экрана, показывающий макет GridView

Это мой класс для получения данных из внутренней памяти.

public class Spacecraft {

    String name;
    boolean Checked=false;
    private Uri uri;;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Uri getUri() {
        return uri;
    }

    public void setUri(Uri uri) {
        this.uri = uri;
    }
    public boolean isChecked(){
        return Checked;
    }
    public void toggleChecked(){
        Checked = !Checked;
    }

}

Это мой Adapter Class.

public class VedioAdapter extends BaseAdapter {
    Context c;
    ArrayList<Spacecraft> spacecrafts;
 public VedioAdapter(Context c, ArrayList<Spacecraft> spacecrafts) {
        this.c = c;
        this.spacecrafts = spacecrafts;
    }

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

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

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

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


        if (view==null)
        {
            //INFLATE CUSTOM LAYOUT
            view= LayoutInflater.from(c).inflate(R.layout.whatsapp_vedio,viewGroup,false);
        }

        final Spacecraft s= (Spacecraft) this.getItem(i);
        if (s.isChecked()){
            view.setBackgroundColor(Color.parseColor("#06ad94"));
        }
        else view.setBackgroundColor(Color.TRANSPARENT);
       // TextView nameTxt= (TextView) view.findViewById(R.id.textView);
        VideoView vedio=(VideoView)view.findViewById(R.id.vedio);
         vedio.setVideoURI(s.getUri());
        //BIND DATA
       // nameTxt.setText(s.getName());



        return view;
    }

}

Это мой класс активности VedioLayout.

public class VedioGrid extends AppCompatActivity {
    Spacecraft s;
    ArrayList<Spacecraft> list = new ArrayList<>();
    ArrayList<Spacecraft> list_items = new ArrayList<>();
    int count = 0;

    public ArrayList<Spacecraft> getPlayList(String rootPath) {
        ArrayList<Spacecraft> fileList = new ArrayList<>();


        try {
            File rootFolder = new File(rootPath);
            File[] files = rootFolder.listFiles(); //here you will get NPE if directory doesn't contains  any file,handle it like this.
            for (File file : files) {
                if (file.isDirectory()) {
                    if (getPlayList(file.getAbsolutePath()) != null) {
                        fileList.addAll(getPlayList(file.getAbsolutePath()));
                    } else {
                        break;
                    }
                } else if (file.getName().endsWith(".mp4")) {

                    s = new Spacecraft();
                    s.setName(file.getName());
                    s.setUri(Uri.fromFile(file));
                    fileList.add(s);
                }
            }
            return fileList;
        } catch (Exception e) {
            return null;
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.images);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        String path = Environment.getExternalStorageDirectory().getAbsolutePath().toString() + "/and/";
        list = getPlayList(path);
        GridView gv = (GridView) findViewById(R.id.simpleGridView);
        final VedioAdapter adapter = new VedioAdapter(this, list);
        gv.setAdapter(adapter);
        gv.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
        gv.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
            @Override
            public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
                Spacecraft s = list.get(position);


                s.toggleChecked();
                if (s.isChecked()) {
                    adapter.notifyDataSetChanged();
                    count = count + 1;
                    mode.setTitle(count + " Deleted Items");
                    list_items.add(s);
                } else {

                    if (count != 0) {
                        adapter.notifyDataSetChanged();
                        count = count - 1;
                        mode.setTitle(count + " Deleted Items");
                        list_items.remove(s);
                    }
                }

            }

            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                MenuInflater inflater = mode.getMenuInflater();
                inflater.inflate(R.menu.menu_main, menu);
                return true;
            }

            @Override
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                return false;
            }

            @Override
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                final ActionMode mod = mode;
                switch (item.getItemId()) {
                    case R.id.action_open:

                        new AlertDialog.Builder(VedioGrid.this)
                                .setIcon(android.R.drawable.ic_dialog_alert)
                                .setTitle("Are you sure?")
                                .setMessage("Do you want to delete this image?")
                                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialogInterface, int p) {

                                        int i;
                                        for (i = 0; i < list_items.size(); ++i) {
                                            Spacecraft s1 = list_items.get(i);
                                            File f = new File(s1.getUri().getPath());
                                            Boolean deleted = f.delete();
                                    VedioGrid.this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(s1.getUri().getPath()))));
                                            if (deleted == true) {

                                                list.remove(s1);
                                                adapter.notifyDataSetChanged();
                                            }
                                        }
                                        list_items.clear();
                                        Toast.makeText(VedioGrid.this, count + "Deleted", Toast.LENGTH_SHORT).show();
                                        count = 0;
                                        mod.finish();


                                    }


                                })
                                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialogInterface, int i) {
                                        dialogInterface.cancel();
                                    }
                                })
                                .show();

                        return true;
                    default:
                        return false;
                }

            }

            @Override
            public void onDestroyActionMode(ActionMode mode) {

            }
        });
        gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Spacecraft s = list.get(position);
                Toast.makeText(getApplicationContext(), s.getName(), Toast.LENGTH_SHORT).show();
            }
        });

    }

    @Override
    public boolean onSupportNavigateUp() {
        onBackPressed();
        return true;
    }
}

Я не получаю видео в макете, и даже если я попытаюсь выбрать несколько элементов, в действии ничего не произойдет. Я что не так делаю?

Я использую

   gv.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
        gv.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() 

но ничего не происходит. Раньше я пробовал это для извлечения изображений из внутренней памяти. Я получаю желаемый результат и могу выбирать элементы, но здесь я использую ту же логику для извлечения видео и отображения в макете GridView, но не получаю результата. Я получаю черные предметы, как показано на скриншоте выше, и не могу их выбрать. Пожалуйста, помоги мне.

Вы добавили разрешение в manifest.xml? а если добавлено, какую версию андроида вы используете?

Harish Kamboj 11.08.2018 09:18

Да, я добавил разрешения на чтение и запись, и я использую compiledsdk версии 27.1.1 и минимальную версию SDK 15. Все отлично работает при извлечении изображений, но для vedios я не получаю результата. Нужно ли мне использовать просмотр изображений для показа миниатюр vedio, потому что я хочу показывать только видео, чтобы не воспроизводить его

Amit 11.08.2018 09:28

а на каком устройстве вы это тестируете?

Harish Kamboj 11.08.2018 09:30

Я использую версию Android 6.0.1 в Le eco Le2. Мне нужно использовать просмотр изображений для отображения миниатюр vedio, потому что я хочу показывать только vedio, чтобы не воспроизводить его

Amit 11.08.2018 09:34

Думаю, это может решить вашу проблему: stackoverflow.com/questions/32517124/…

Harish Kamboj 11.08.2018 09:37

Привет, спасибо, проблема решена, но в gridviewlayout он работает очень медленно. Когда я прокручиваю или выбираю элементы, которые требуют времени, вы можете помочь, пожалуйста, как его улучшить.

Amit 11.08.2018 10:01

используйте фоновый поток или AsyncTask для заполнения списка

Harish Kamboj 11.08.2018 10:02
0
7
41
0

Другие вопросы по теме