Здравствуйте, я огляделся и не смог найти четкого ответа на мою проблему. У меня есть custom adapter
, BaseAdapter
, что я использую в сочетании с моим ListActivity
. Внутри представления для каждого элемента адаптера я хочу добавить checkbox
, который, когда clicked
, начинает dialog fragment
с запросом у пользователя, хочет ли он удалить этот элемент. У меня возникли проблемы с созданием FragmentManager
в пределах BaseAdapter
. Ниже приведен мой код для участка getView
от класса BaseAdapter
. Редактировать: Код работает нормально. Я закончил тем, что пропустил Activity
от конструктора Adapter
и использовал его Activity
, чтобы получить FragmentManager
.Как добавить диалоговое окно Dialog в BaseAdapter?
private ArrayList<AssignmentRecord> alist = new ArrayList<AssignmentRecord>();
private final Context aContext;
public AssignmentAdapter (Context context, Activity activity){
aContext = context;
aActivity = activity;
}
public void addItem (AssignmentRecord item) {
alist.add(item);
notifyDataSetChanged();
}
public void deleteItem (AssignmentRecord item) {
alist.remove(item);
notifyDataSetChanged();
}
public View getView(int position, View convertView, ViewGroup parent) {
final CheckBox statusBox = (CheckBox)convertView.findViewById(R.id.adapter_finish_checkbox);
if (assignmentRecord.getCurrentStatus()== AssignmentRecord.Status.NOTFINISHED){
statusBox.setChecked(false);
} else {
statusBox.setChecked(true);
}
statusBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
class removeCheckedFragment extends DialogFragment{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage("Do you want to remove this item?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
deleteItem(assignmentRecord);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
return builder.create();
}
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
//prompt to delete record;
assignmentRecord.setStatus(AssignmentRecord.Status.FINISHED);
FragmentManager fragManager = aActivity.getFragmentManager();
removeCheckedFragment newFragment = new removeCheckedFragment();
newFragment.show(fragManager, "TEST");
// cancel intent for alarm manager
} else {
// do nothing
}
}
});
return itemlayoutview;
}
У меня возникают проблемы при попытке создания FragmentManager. В частности, я получаю это сообщение
111-05 00:03:56.575 3839-3839/com.example.victor.listadapterexample E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.ClassCastException: android.app.Application cannot be cast to android.app.Activity
at com.example.victor.listadapterexample.AssignmentAdapter$1.onCheckedChanged(AssignmentAdapter.java:153)
at android.widget.CompoundButton.setChecked(CompoundButton.java:126)
at android.widget.CompoundButton.toggle(CompoundButton.java:87)
at android.widget.CompoundButton.performClick(CompoundButton.java:99)
at android.view.View$PerformClick.run(View.java:17721)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Любая помощь будет оценена
Таким образом, в этом вылетает строке 'FragmentManager fragManager = ((Activity) aContext) .getFragmentManager();'? – Nawako
общий общий результат ошибки logcat –
Не создавайте экземпляр адаптера с контекстом приложения. –