![](/img/trans.png)
[英]Android - How to access a getter method in parent Activity from Fragment
[英]How to access a method in fragment class from parent Activity?
我正在實現一個數據庫,因為我需要准備列表或每次進行一些更改時都對其進行更新。 我在mainActivity的頂部有一個片段,我無法在MainActivity
內執行操作,因此一些操作將在MainActivity
完成,而其他的操作將在fragment class
。 因此,在擴展片段的片段類中,有一個名為preparelist()
的方法,該方法更新數據庫並填充數據。 在我的主要活動中,我使用默認的overflow
菜單項執行刪除操作, 但是在這里我需要調用preparelist()
方法以顯示執行的操作,或者必須關閉應用程序才能顯示已執行的操作。執行
我已經嘗試了以下網絡上的代碼
MyFragment fragment= (MyFragment)getSupportFragmentManager().findFragmentById(R.id.frag);
( (MyFragment)fragment).prepareList();
但這顯示錯誤
java.lang.NullPointerException: Attempt to invoke virtual method...on a null object reference
基本上,我想知道的是如何在
MainActivity
調用preparelist()
方法,而不創建任何其他抽象類或類似的東西
從Activity
調用Fragment
public方法:
MyFragment fragment= (MyFragment)getSupportFragmentManager().findFragmentById(R.id.frag);
if(fragment != null)
( (MyFragment)fragment).prepareList();
else
Toast.makeText(this, "fragment is null", Toast.LENGTH_SHORT).show();
將刪除功能移至片段:
在您的片段中,輸入:
@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); //this fragment can now override //options menu }
現在,您將執行與活動中相同的操作,重寫onCreateOptionsMenu()
, onOptionsItemSelected
等。請注意,方法簽名與Activity
的簽名不同。 請參閱片段文檔。
相反,不是按ID查找片段,而是按TAG查找片段,因為該用途需要進行兩次更改。 見下面的代碼
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.id_of_frame_layout_in_xml, myFragment ,"ADD_A_TAG_NAME_HERE");
fragmentTransaction.commit();
用TAG名稱替換ADD_A_TAG_NAME_HERE,id_of_frame_layout_in_xml將是xml中的框架布局,您將在其中添加/替換片段
現在您可以按TAG查找片段
MyFragment fragment= (MyFragment)getSupportFragmentManager().findFragmentByTAG("ADD_A_TAG_NAME_HERE");
創建TAG的一種好方法如下
public class MyFragment extends Fragment {
public static final String TAG = MyFragment.class.getSimpleName();
...
}
因此,您的聲明將如下所示:
getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.id_of_frame_layout_in_xml, myFragment, MyFragment.TAG);
和
MyFragment fragment= (MyFragment)getSupportFragmentManager().findFragmentByTAG(MyFragment.TAG);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.