我的音板有这个代码,
public class soundboardActivity扩展了Activity {
View lastClickedView;
public static void setIntArrayPref(Context context, String key, ArrayList<Integer> values) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
JSONArray a = new JSONArray();
for (int i = 0; i < values.size(); i++) {
a.put(values.get(i));
}
if (!values.isEmpty()) {
editor.putString(key, a.toString());
} else {
editor.putString(key, null);
}
editor.commit();
}
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
// Contextual Menu
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("OPTIONS");
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_contex_apm, menu);
lastClickedView = v;
}
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.ctxtapm_opcio1:
//favorites
switch (lastClickedView.getId()){
case R.id.a1: favorites.add(R.raw.sound1);
return true;
}
case R.id.a2: favorites.add(R.raw.sound2);
return true;
}
case R.id.a3: favorites.add(R.raw.sound3);
return true;
}
setIntArrayPref(this, "favoritos", favorites);
return true;
case R.id.ctxtapm_opcio2:
//share
return true;
default:
return super.onContextItemSelected(item);
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.apm);
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(R.id.a1, R.raw.sound1);
map.put(R.id.a2, R.raw.sound2);
map.put(R.id.a3, R.raw.sound3);
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
final MediaPlayer sound = MediaPlayer.create(this,entry.getValue());
Button button = (Button) findViewById(entry.getKey());
registerForContextMenu(button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
sound.start();
}
});
}
FavoritesActivity代码:
public class FavoritosActivity extends Activity {
ArrayList<Integer> favorites=new ArrayList<Integer>();
public View getView (int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = this.getLayoutInflater();
View item = inflater.inflate(R.layout.buttonsample, null);
return item;
}
public static ArrayList<Integer> getIntArrayPref(Context context, String key) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String json = prefs.getString(key, null);
ArrayList<Integer> favoritos = new ArrayList<Integer>();
if (json != null) {
try {
JSONArray a = new JSONArray(json);
for (int i = 0; i < a.length(); i++) {
int musicaid = a.optInt(i);
favoritos.add(musicaid);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
return favoritos;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.proba);
favorites = getIntArrayPref(this, "favoritos");
ListView lv = (ListView) findViewById(R.id.listView1);
ArrayAdapter<Integer> arrayAdapter = new ArrayAdapter<Integer>(this,android.R.layout.simple_list_item_1, favorites);
lv.setAdapter(arrayAdapter);
}
}
问题是,如何为上下文菜单实现“添加到收藏夹”选项(收藏夹在另一个活动中)?
非常感谢!
答案 0 :(得分:1)
过度使用onCreateOptionsMenu,在其中再为收藏夹创建一个ArrayList。
每次将歌曲ID存储在arraylist中。 将此数组列表存储在SharedPreferences对象中 当用户选择收藏夹播放导航到下一个活动时获取SharedPreferences。 根据收藏列表中的位置播放歌曲。
我希望上述解决方案对你来说很明白