2016-11-20 30 views
0

有人可以解釋這裏有什麼問題嗎?該錯誤是波紋管:我無法從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

回答

0

我發現了這個問題。問題是你不要將你的片段與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

0

片段標籤,如代碼做這樣的

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> 
相關問題