如何从另一个类访问片段变量

时间:2013-09-27 16:56:20

标签: android android-fragments android-alertdialog

我有一个片段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();
    }
}

2 个答案:

答案 0 :(得分:0)

有很多可能的方法可以做到这一点。最简单的可能是将NewsFragmentDialog作为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();
    }
}