Dej*_*jan 1 android contextmenu
我有这种方法:
void showAllSongsMenu() {
if (rebuilding) {
Toast.makeText(MusicPlayerActivity.this,
"Database rebuild in progress, please wait!",
Toast.LENGTH_SHORT).show();
return;
}
LayoutInflater layoutInflater = (LayoutInflater) getBaseContext()
.getSystemService(LAYOUT_INFLATER_SERVICE);
final View popupView = layoutInflater.inflate(R.layout.allsongs_list,
null);
allSongs = new PopupWindow(popupView, LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT, true);
Button allSongsMenu = (Button) allSongs.getContentView().findViewById(
R.id.close_all_songs_menu);
allSongs.setBackgroundDrawable(MusicPlayerActivity.this.getResources()
.getDrawable(R.drawable.unknown_artist));
allSongs.setFocusable(true);
allSongsMenu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
allSongs.dismiss();
}
});
ListView lv = (ListView) allSongs.getContentView().findViewById(
R.id.all_songs_list);
//registerForContextMenu(lv);
lv.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Song options");
menu.add(0, v.getId(), 0, "enqueue song");
menu.add(0, v.getId(), 0, "song info");
menu.add(0, v.getId(), 0, "cancel action");
}});
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
currentTrack = arg2;
loadTrack();
if (isTuning)
if (track != null)
track.pause();
isTuning = true;
btnPlay.setBackgroundResource(R.drawable.pause);
playTrack();
allSongs.dismiss();
}
});
base.getAllData();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.simple_row, base.getNames());
lv.setAdapter(adapter);
allSongs.showAtLocation(trackInfo, Gravity.CENTER, 0, -30);
}
Run Code Online (Sandbox Code Playgroud)
没有显示ContextMenu。我还实现了onContextItemSelected,但由于未显示菜单,因此无法正常工作。每当我需要此PopupWindow时,都会调用此方法,并且它是作为选项之一从OptionsMenu调用的。我还尝试了在没有监听器的情况下为上下文菜单事件注册listview,但是它也不起作用。
我相信你必须为上下文菜单注册listview
registerForContextMenu(lv);
Run Code Online (Sandbox Code Playgroud)
您评论了
您还缺少用于打开上下文菜单的代码:
openContextMenu(view);
Run Code Online (Sandbox Code Playgroud)
应该放在某个事件上,例如单击按钮
您实际上可以从另一个对话框片段开始一个dialogfragment,从而简化编码。示例如下:
活动代码:
public class MyActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = new Button(this);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new Test1().show(getSupportFragmentManager(),"bla");
}
});
setContentView(button);
}
}
Run Code Online (Sandbox Code Playgroud)
第一个对话框片段:
public class Test1 extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Button button = new Button(getActivity());
button.setText("test1");
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new Test2().show(getActivity().getSupportFragmentManager(),"bla");
}
});
return button;
}
}
Run Code Online (Sandbox Code Playgroud)
第二个对话框片段:
public class Test2 extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Button button = new Button(getActivity());
button.setText("test2");
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
return button;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1293 次 |
| 最近记录: |