Создание меню переполнения для элементов представления списка - PullRequest
0 голосов
/ 21 декабря 2018

Я создаю действие, которое отображает записанные mp3-файлы на SD-карте в виде списка, есть ли встроенный метод для добавления значка переполнения (3 точки) в каждой строке списка для отображения меню.

Прикрепленный снимок экрана - это то, что я делал до сих пор.Спасибо

enter image description here

Это код для отображения mp3-файлов в определенной папке, пожалуйста, если есть метод, покажите мне, что это и где я его использую.

class Mp3Filter implements FilenameFilter{
    @Override
    public boolean accept(File dir, String name) {
        return (name.endsWith(".mp3"));
    }
}
public class MainActivity extends Activity {
    private static final String SD_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Xylophone/";
    //private static final String SD_PATH = "/sdcard/Xylophone/";
    private List<String> songs = new ArrayList<String>();
    private MediaPlayer mp = new MediaPlayer();
    ListView list_view;
    ArrayAdapter<String> adapter;
    public ImageView  overflow;
    private Context mContext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list_view = findViewById(R.id.listview1);
        overflow = (ImageView) findViewById(R.id.overflow1);
        //hide android logo from actionbar
        getActionBar().setIcon(new ColorDrawable(getResources().getColor(android.R.color.transparent)));
        //updatePlayList();
        if (ActivityCompat.checkSelfPermission(this,
                android.Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
            fillList();
        } else {
            ActivityCompat.requestPermissions(this, new String[] {android.Manifest.permission.READ_EXTERNAL_STORAGE}, 100);
        }
        registerForContextMenu(list_view);
        Button stopPlay = (Button) findViewById(R.id.stopBtn);
        stopPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mp.stop();
            }
        });
        list_view.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                try{
                    mp.reset();
                    mp.setDataSource(SD_PATH + songs.get(i));
                    mp.prepare();
                    mp.start();
                }catch (IOException e){
                    Log.v(getString(R.string.app_name),e.getMessage() );
                }
            }
        });
    }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
    }
    //to delete item
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        //now you have to get the ID of the context menu item
        switch (item.getItemId())
        {
            case R.id.edit_option:
                return true;
            case R.id.share_option:
                return true;
            case R.id.delete_option:
                //remove particular item from the SDCARD
                String file_name = songs.get(info.position);
                String MEDIA_PATH = new String(SD_PATH + file_name);
                File file = new File(MEDIA_PATH);
                file.delete();
                //remove particular item from the list array
                songs.remove(info.position);
                //you need to refresh that particular adapter
                adapter.notifyDataSetChanged();
                return true;
            //if the user does not do anything
            default: return super.onContextItemSelected(item);
        }
    }
    private void fillList() {
        File file = new File(SD_PATH );
        File list[] = file.listFiles();

        for (int i = 0; i < list.length; i++) {
            songs.add(list[i].getName());
        }
        //setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, songs));
        adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, songs );
        list_view.setAdapter(adapter);
    }
    //play audio on listview
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 100) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
                    fillList();
                }
            }
        }
    }
    private void updatePlayList(){
        File home = new File(SD_PATH);
        if (home.listFiles(new Mp3Filter()).length > 0){
            for(File file : home.listFiles(new Mp3Filter())){
                songs.add(file.getName());
            }
            ArrayAdapter<String> songlist = new ArrayAdapter<String>(this,R.layout.song_item,songs );
            //setListAdapter(songlist);
        }
    }
}

1 Ответ

0 голосов
/ 21 декабря 2018

Вы ищете PopupMenu, он будет отображать Menu, расположенный на View, который вы передаете.

Добавьте это к слушателю onClick вашего переполнения.

// Create a PopupMenu with Context, and the View it's attached to.
PopupMenu popup = new PopupMenu(context, view);

// Inflating the layout with your menu resource.
popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());

// Setting the onClick
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
    public boolean onMenuItemClick(MenuItem item) {
            // TODO: Handle the item selected 
        ).show();
        return true;
    }
});

// Show the popup
popup.show();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...