我无法从MainActivity调用碎片方法
有人可以解释这里有什么问题吗?该错误是波纹管:我无法从MainActivity调用碎片方法
守则MainAcitivity:
FragmentManager fm = getSupportFragmentManager();
SvePonudeFragment fragment = (SvePonudeFragment) fm.findFragmentById(R.id.ponudice);
fragment.reloadData();
片段类:
public class SvePonudeFragment extends Fragment {
private RecyclerView rv;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.sve_ponude_fragment, container, false);
rv = (RecyclerView) rootView.findViewById(R.id.rv);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
rv.setLayoutManager(llm);
ArrayList<Ponuda> listaPonuda = null;
initializeAdapter(listaPonuda);
return rootView;
}
private void initializeAdapter(List<Ponuda> preuzetePonude){
RVAdapter adapter = new RVAdapter(preuzetePonude);
rv.setAdapter(adapter);
}
public void reloadData(){
System.out.println("I ENTEEERED");
}
}
片段的XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:id="@+id/ponudice">
<android.support.v7.widget.RecyclerView
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/rv"
>
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
有什么不对呢?有人可以解释我吗? 这是错误:
W/System.err: java.lang.NullPointerException W/System.err: at com.example.filip.dajsve.Activities.MainActivity.onDataLoaded(MainActivity.java:190) W/System.err: at com.example.filip.dajsve.Loaders.DatabaseDataLoader.loadData(DatabaseDataLoader.java:22)
我发现了这个问题。问题是你不要将你的片段与mainActivity链接起来。首先你应该将你的片段添加到mainActivty的xml中,然后给这个片段一个id,然后在主活动中访问它,片段ID不使用这个ID android:id="@+id/ponudice">
,因为这个ID与相对布局不相关。检查主要活动的XML代码,你应该看看下面
<fragment
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:name="theNameOfYourPackage.theNameOfFragment"
android:id="@+id/ponudice_in_main_activity"/>
这不是问题。访问以下链接以了解更多有关片段的信息https://developer.android.com/guide/components/fragments.html – mallaudin
片段标签,如代码做这样的
FragmentManager fm = getSupportFragmentManager();
SvePonudeFragment fragment = new SvePonudeFragment();
fm.beginTransaction().replace(R.id.framecontainer,fragment).commit();
和你activity_main.xml中文件将
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/framecontainer"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:padding="16dp"
>
</FrameLayout>
发表你的'在调用'reloadData();'add' Log.d(“MyApp”,“is null =”+(fragment == null?“null”:“not null”));'之前请调用MainActivity'类 – Max
''并再次运行。然后告诉我们你的片段是否为空。 – Budius