2013-09-27 87 views
0

我有一个片段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

有很多可能的方法来做到这一点。最简单的可能是通过NewsFragmentDialog作为OnItemClickListenerListViewItem构造函数中的参数。

public class OnItemClickListenerListViewItem implements OnItemClickListener { 
    private NewsFragment mNewsFragment; 

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

    .... 
} 
0

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

您需要从OnItemClickListenerListViewItem找到另一种引用AlertDialog的方法。

一种可能的方法是将片段添加到听者的构造函数,像这样:

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