我无法从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)

+1

发表你的'在调用'reloadData();'add' Log.d(“MyApp”,“is null =”+(fragment == null?“null”:“not null”));'之前请调用MainActivity'类 – Max

+0

''并再次运行。然后告诉我们你的片段是否为空。 – Budius

我发现了这个问题。问题是你不要将你的片段与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"/> 
+0

这不是问题。访问以下链接以了解更多有关片段的信息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>