2016-11-20 4 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

сообщения вашего ' MainActivity': – Max

+0

перед вызовом 'reloadData();' add' Log.d ("MyApp", "is null =" + (фрагмент == null? "Null": "not null")); 'и запустить снова , А затем сообщите нам, если ваш фрагмент равен нулю. – Budius

ответ

0

Я нашел проблему. Проблема в том, что вы не связываете свой фрагмент с mainActivity. сначала вы должны добавить свой фрагмент в xml mainActivty и предоставить фрагменту идентификатор, а затем получить доступ к нему в основном действии с идентификатором фрагмента, не используя этот id android:id="@+id/ponudice">, потому что этот идентификатор связан с относительной компоновкой, а не с фрагментом. проверить 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> 
Смежные вопросы