亲爱的朋友们,
我创建了一个音乐应用程序。它包含一些专辑集合,当我们点击特定专辑时,该专辑中的歌曲将被加载到其他活动中。这些歌曲显示为表格布局的行,并且这些行基于歌曲动态地改变。我已经为tablerow注册了上下文菜单,并且还显示了该上下文菜单。但我的问题是找到一个特定的行,在onContextItemSelected()
中无法显示上下文菜单。我试过ContextMenuInfo info = item.getMenuInfo();
但是信息变为空。我的问题是,
1)上下文菜单是否仅适用于使用适配器的ListView?
2)Tablelayout也像ListView一样工作,那么我的代码有什么问题?
代码快照
public class AlbumActivity extends Activity{
private int DYNAMIC_ROW_ID = 1;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.album);
LoadingAlbumThread t = new LoadingAlbumThread(dataHandler);
t.start();
}
public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.album_contextmenu, menu);
}
public boolean onContextItemSelected(MenuItem item){
ContextMenuInfo info = item.getMenuInfo(); // here 'info' gets null value,that is the main problem in my application
switch(item.getItemId()){
case R.id.playsong_contextmenuitem:
playSong(info.id); //This 'info.id' gives the id of selected table row
return true;
case R.id.add_to_playlist_contextmenuitem:
return true;
case R.id.emial_contextmenuitem:
return true;
case R.id.twitter_contextmenuitem:
return true;
case R.id.facebook_contextmenuitem:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
final Handler dataHandler = new Handler(){
public void handleMessage(Message msg){
TableRow tr = new TableRow(getBaseContext());
registerForContextMenu(tr);
tr.setId(DYNAMIC_ROW_ID++);
.......
.......
}
};
private class LoadingAlbumThread extends Thread{
Handler handler = null;
public LoadingDataThread(Handler handler) {
this.handler = handler;
}
public void run(){
albumJSONObject = getJSONObject(intent.getStringExtra("JSONAlbumData"));
if(albumJSONObject!=null)
albumJSONArray = albumJSONObject.getJSONArray("album");
if(albumJSONArray!=null){
noOfSongs = albumJSONArray.length();
for(int i=0;i<noOfSongs;i++){
songTitleStr = songsJSONArray.getJSONObject(i).getString("song_title");
handler.sendMessage(handler.obtainMessage());
}
}
}private JSONObject getJSONObject(String data){
JSONObject jsonObj = null;
if(data!=null){
jsonObj = new JSONObject(data)
}
return jsonObj;
}
我欢迎您提出宝贵意见。
由于 VENU
答案 0 :(得分:2)
对于这个问题,我在下面找到了解决方案
http://www.anddev.org/post87342.html?hilit=context%20menu%20on%20tablelayout#p87342
答案 1 :(得分:1)
上下文菜单是否仅适用于使用适配器的ListView?
不,任何小部件都可以设置上下文菜单。在您的情况下,您需要为每个registerForContextMenu()
致电TableRow
。
话虽如此,如果您希望有超过几十行,我建议您将其转换为ListView
。