我创建了一个活动,该活动在列表视图中的sdcard上显示记录的mp3 fils,是否有一个内置方法在每个列表视图行上添加一个溢出图标(3个点)以显示菜单。
所附的屏幕截图是我到目前为止所做的。 谢谢
这是用于在特定文件夹上显示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);
}
}
}
答案 0 :(得分:0)
您正在寻找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();