Ich bekam wirklich anying Problem mit dem Zugriff auf Methoden in Fragment.Android Studio Zugriff auf Fragment-Methode von MainActivity
Fehler, die ich bekam
Prozess: com.crelix.crelix, PID: 18913 java.lang.NullPointerException: Der Versuch, virtuelle Methode ‚Leere com.crelix.crelix.ClickerFragment.refreshViews aufzurufen() 'auf einem Nullobjekt Referenz bei com.clix.clix.NavigationActivity.Refresh (NavigationActivity.java:530) bei com.crelix.celix.NavigationActivity $ 1 $ 1.run (NavigationActivity.java:84) bei android.os. Handler.handleCallback (Handler.java:810) bei android.os.Handler.dispatchMessage (Handler.java:99) bei android.os.Looper.loop (Looper.java:189) bei android.app.ActivityThread.main (ActivityThread.java:5529) bei java.lang.reflect.Method.invoke (Native Methode) bei java.lang.reflect.Method.invoke (Methode.java:372) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java: 950) bei com.android.internal .os.ZygoteInit.main (ZygoteInit.java:745)
Mein Fragment Beispiel:
package com.crelix.crelix;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.CardView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
import org.w3c.dom.Text;
public class ClickerFragment extends Fragment {
public static ClickerFragment newInstance() {
ClickerFragment fragment = new ClickerFragment();
return fragment;
}
public ClickerFragment() {
}
private TextView MoneyText;
private TextView MoneyPerTapTView;
private TextView BoxesText;
private TextView BoxesPerTapTView;
private ProgressBar progressBar;
MainHolder Main = new MainHolder();
public void refreshViews(){
MoneyText.setText("Money: " +Main.Money[0]);
MoneyPerTapTView.setText("$ " + Main.Money[1] + " per tap");
BoxesText.setText("Boxes: " + Main.Boxes[0] + "/100");
BoxesPerTapTView.setText("Points " + Main.Boxes[1] + " per tap");
progressBar.setProgress(Main.Boxes[0]);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_clicker, container, false);
MoneyText = (TextView) rootView.findViewById(R.id.MoneyText);
MoneyPerTapTView = (TextView) rootView.findViewById(R.id.MoneyPerTapTView);
BoxesText = (TextView) rootView.findViewById(R.id.BoxesText);
BoxesPerTapTView = (TextView) rootView.findViewById(R.id.BoxesPerTapTView);
progressBar = (ProgressBar) rootView.findViewById(R.id.progressBar);
return rootView;
}
}
Und ich möchte den Zugriff auf sie aus MainActivity wie:
public void Refresh()
{
ClickerFragment ClickerFragment = (ClickerFragment) getSupportFragmentManager().findFragmentById(R.id.ClickerFragment);
ClickerFragment.refreshViews();
}
Hier füge ich meine Fragmente
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
Fragment fragment = null;
if (id == R.id.nav_clicker) {
fragment = new ClickerFragment();
} else if (id == R.id.nav_upgrades) {
fragment = new UpgradeFragment();
} else if (id == R.id.nav_warehouse) {
fragment = new WarehouseFragment();
} else if (id == R.id.nav_postservice) {
fragment = new PostserviceFragment();
} else if (id == R.id.nav_shop) {
fragment = new ShopFragment();
} else if (id == R.id.nav_market) {
fragment = new MarketFragment();
} else if (id == R.id.nav_workshop) {
fragment = new WorkshopFragment();
} else if (id == R.id.nav_garage) {
fragment = new GarageFragment();
} else if (id == R.id.nav_museum) {
fragment = new MuseumFragment();
} else if (id == R.id.nav_collections) {
fragment = new CollectionsFragment();
}
if (fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
Mögliche Duplikate von [Was ist eine NullPointerException, und wie behebe ich es?] (http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-fix-it) –
Das Problem damit ist es nicht zu überprüfen, ob das Fragment sichtbar ist oder die Element wurde noch erstellt. Sehen Sie sich den Lebenszyklus eines Fragments zur weiteren Klärung an, aber der Kern davon ist höchstwahrscheinlich onCreateView hat noch nicht ausgelöst, wenn Sie versuchen, refreshViews aufzurufen. – aminner
@Manza Bearbeitet. ;) – trakasi