Я хочу открыть новое действие при щелчке по элементу в списке. Но приложение вылетает при нажатии на элемент. Эта строка дает ошибку context.startActivity(new Intent(context, MusicPlayer.class));
внутри метода getView()
public class ListViewAdapter extends ArrayAdapter {
List list = new ArrayList();
private Context context;
public ListViewAdapter(Context context, int resource) {
super(context, resource);
this.context = context;
}
static class DataHandler {
TextView title;
CheckBox checkBox;
}
@Override
public void add(Object object) {
super.add(object);
list.add(object);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return this.list.get(position);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row;
row = convertView;
final DataHandler handler;
if (convertView == null) {
final SharedPreferences sharedPreferences = getContext().getSharedPreferences("MyBookmark", Context.MODE_PRIVATE);
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.row, parent, false);
handler = new DataHandler();
handler.title = (TextView) row.findViewById(R.id.textView);
handler.checkBox = (CheckBox) row.findViewById(R.id.checkBox);
Boolean check = sharedPreferences.getBoolean(String.valueOf(position), false);
Boolean opened = sharedPreferences.getBoolean(String.valueOf(position) + "selected", false);//if opened = true listview
if (opened == true) {
//row.setBackgroundColor(Color.parseColor("#DCDCDC"));
handler.title.setTextColor(Color.parseColor("#696969"));
}
handler.checkBox.setChecked(check);
handler.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(String.valueOf(position), handler.checkBox.isChecked());
editor.commit();
}
});
row.setTag(handler);
} else {
handler = (DataHandler) row.getTag();
}
DataProvider dataProvider;
dataProvider = (DataProvider) this.getItem(position);
handler.title.setText(dataProvider.get_title());
row.setClickable(true);
row.setFocusable(true);
row.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), handler.title.getText(), Toast.LENGTH_SHORT).show();
handler.title.setTextColor(Color.parseColor("#696969"));
SharedPreferences sharedPreferences = getContext().getSharedPreferences("MyBookmark", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(String.valueOf(position) + "selected", true);
editor.commit();
context.startActivity(new Intent(context, MusicPlayer.class));
}
});
return row;
}
}
< Сильный > Logcat
FATAL EXCEPTION: main Process: com.radioaudio.motivationalaudios, PID: 5307
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
at android.app.ContextImpl.startActivity(ContextImpl.java:672)
at android.app.ContextImpl.startActivity(ContextImpl.java:659)
at android.content.ContextWrapper.startActivity(ContextWrapper.java:331)
at com.radioaudio.motivationalaudios.ListViewAdapter$2.onClick(ListViewAdapter.java:105)
2 ответа
Как я уже упоминал в комментарии, ваше сообщение об ошибке содержит следующее:
Для вызова startActivity () извне контекста Activity требуется флаг FLAG_ACTIVITY_NEW_TASK. Вы действительно этого хотите?
Итак, вам нужно сначала объявить о намерении, а затем установить флаг намерения так:
Intent intent = new Intent(context, MusicPlayer.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Это должно удовлетворять как минимум тому, что является исключением.
Назначьте событие щелчка ListView в действии, а не представлению в адаптере.
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.