我不能从MainActivity

时间:2016-11-20 17:49:33

标签: java android android-fragments

有人可以解释这里的问题是什么吗?错误如下:

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)

2 个答案:

答案 0 :(得分: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"/>

答案 1 :(得分: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>