我有一个片段NewsFragment
,我在其中定义AlertDialog
。我想在点击该项目后访问AlertDialog
以关闭它。但是我无法访问它。
我在互联网上找到了这个代码,它运行正常,但是没有片段的活动。
((NewsFragment) context).alertDialogNews.cancel();
public class OnItemClickListenerListViewItem implements OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Context context = view.getContext();
Context context = view.getContext();
TextView textViewItem = ((TextView) view.findViewById(R.id.textViewItem));
// get the clicked item name
String listItemText = textViewItem.getText().toString();
// get the clicked item ID
String listItemId = textViewItem.getTag().toString();
// just toast it
// Toast.makeText(context, "Item: " + listItemText + ", Item ID: " + listItemId, Toast.LENGTH_SHORT).show();
//((MainActivity) context).alertDialogStores.cancel();
((NewsFragment) context).alertDialogNews.cancel();
}
}
答案 0 :(得分:0)
有很多可能的方法可以做到这一点。最简单的可能是将NewsFragment
或Dialog
作为OnItemClickListenerListViewItem
构造函数中的参数传递。
public class OnItemClickListenerListViewItem implements OnItemClickListener {
private NewsFragment mNewsFragment;
public OnItemClickListenerListViewItem(NewsFragment nf){
mNewsFragment = nf;
}
....
}
答案 1 :(得分:0)
问题是Fragment
不是Context
。因此,您通过view.getContext()
检索的视图上下文不是您的NewsFragment
。
您需要找到另一种从OnItemClickListenerListViewItem
引用AlertDialog的方法。
一种可能的方法是将Fragment添加到侦听器的构造函数中,如下所示:
public class OnItemClickListenerListViewItem implements OnItemClickListener {
private AlertDialog mAlertDialog;
public OnItemClickLIstenerListViewItem(AlertDialog dialog) {
mAlertDialog = dialog;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Do your click logic
mAlertDialog.dismiss();
}
}