0

我有一个片段NewsFragment,我在其中定义了一个AlertDialog. AlertDialog单击该项目后,我想访问以将其关闭。但是我无法访问它。

我在互联网上找到了这段代码,它工作正常,但使用 Activity 而不是使用 Fragment。

((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();
    }
}
4

2 回答 2

0

问题是 aFragment不是 a Context。因此,您检索的视图上下文view.getContext()不是您的NewsFragment.

您将需要找到另一种从OnItemClickListenerListViewItem.

一种可能的方法是将 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();
    }
}
于 2013-09-27T17:08:19.460 回答
0

有很多可能的方法可以做到这一点。最简单的可能是在构造函数中传递 theNewsFragment或 theDialog作为参数OnItemClickListenerListViewItem

public class OnItemClickListenerListViewItem implements OnItemClickListener {
    private NewsFragment mNewsFragment;

    public OnItemClickListenerListViewItem(NewsFragment nf){
        mNewsFragment = nf;
    }

    ....
}
于 2013-09-27T17:08:14.503 回答