簡體   English   中英

如何從父Activity訪問片段類中的方法?

[英]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()方法,而不創建任何其他抽象類或類似的東西

解決方案1

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

解決方案2

將刪除功能移至片段:

  1. 在片段中移動刪除操作,
  2. 在您的片段中,輸入:

     @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); //this fragment can now override //options menu } 
  3. 現在,您將執行與活動中相同的操作,重寫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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM