![](/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.