2013-09-27 92 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(); 
    } 
}