2016-07-09 17 views
0

Obwohl ich ähnliche Post-Fragen gelesen habe, habe ich keine Lösung für mein Problem gefunden. Wie Sie im Titel sehen können, kann ich Textview in TextFragment nicht ändern. Ich erhalte diesen Fehler: 07-09 15: 05: 55.593 6441-6441/com.eguide.dimitris.campusguide E/AndroidRuntime: FATALE AUSNAHME: Haupt 07-09 15: 05: 55.593 6441-6441/com.eguide. dimitris.campusguide E/AndroidRuntime: java.lang.NullPointerException 07-09 15: 05: 55.593 6441-6441/com.eguide.dimitris.campusguide E/AndroidRuntime: at com.eguide.dimitris.campusguide.mainActivity $ 1. onVisitStart (mainActivity.java:66)TextView in Fragment von Hauptaktivität (mit Schnittstelle) kann nicht geändert werden,

Also ich würde jede Hilfe zu schätzen wissen. Vielen Dank im Voraus.

mainActivity

public class mainActivity extends Activity implements inter { 
public PlaceManager placeManager; 
public PlaceEventListener placeEventListener; 
public String name; 
TextView tt; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_activity); 
    Gimbal.setApiKey(this.getApplication(), "5436462c-6400-48f4-b6af-e0ad2094550f"); 
    CommunicationManager.getInstance().startReceivingCommunications(); 
    tt=(TextView) findViewById(R.id.test); 
} 



@Override 
public void respond(String data) { 
    FragmentManager manager2=getFragmentManager(); 
    textFragment frag2= (textFragment) manager2.findFragmentById(R.id.text_fragment); 
    frag2.changeText(data); 
} 

@Override 
public void barstatus() { 
    FragmentManager manager1=getFragmentManager(); 
    imageFragment frag1=(imageFragment) manager1.findFragmentById(R.id.image_fragment); 
    frag1.changeStatus(); 
} 

@Override 
public void barstatus2() { 
    FragmentManager manager1=getFragmentManager(); 
    imageFragment frag1=(imageFragment) manager1.findFragmentById(R.id.image_fragment); 
    frag1.changeStatus2(); 
} 


public void changestatus(){ 
    placeEventListener= new PlaceEventListener() { 
     @Override 
     public void onVisitStart(Visit visit) { 
      super.onVisitStart(visit); 
      name=visit.getPlace().getName().toString(); 
      if (name!=null){ 
       respond(name); 
       barstatus2(); 
      } 
     } 
    }; 

textFragment

import android.app.Fragment; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 


public class textFragment extends Fragment { 

TextView text1; 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.text_fragment, container,false); 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    text1 = (TextView)getActivity().findViewById(R.id.textF); 
    text1.setText("Press Start button to find buildings near you"); 

} 
public void changeText(String data){ 
    text1 = (TextView)getActivity().findViewById(R.id.textF); 
    text1.setText(data.toString()); 

} 

} 

imageFragment

import android.app.Fragment; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.transition.Visibility; 
import android.view.ActionProvider; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ProgressBar; 



public class imageFragment extends Fragment { 

private ProgressBar bar; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.image_fragment,container,false); 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    bar=(ProgressBar) getActivity().findViewById(R.id.progressBar); 
    bar.setVisibility(View.INVISIBLE); 

} 

public void changeStatus(){ 
    bar=(ProgressBar) getActivity().findViewById(R.id.progressBar); 
     bar.setVisibility(View.VISIBLE); 
    } 

public void changeStatus2(){ 
    bar=(ProgressBar) getActivity().findViewById(R.id.progressBar); 
    bar.setVisibility(View.INVISIBLE); 
} 
} 

interface

public interface inter { 
public void respond(String data); 

public void barstatus(); 

public void barstatus2(); 
} 

Jungs beachten Sie auch tha ich versucht habe und dies in mainActivity aber nichts geändert.

inter inte; 


public void changestatus(){ 
    placeEventListener= new PlaceEventListener() { 
     @Override 
     public void onVisitStart(Visit visit) { 
      super.onVisitStart(visit); 
      name=visit.getPlace().getName().toString(); 
      if (name!=null){ 
       inte.respond(name); 
       inte.barstatus2(); 
      } 
     } 
    }; 

EDIT: wenn statt

public void changestatus(){ 
placeEventListener= new PlaceEventListener() { 
    @Override 
    public void onVisitStart(Visit visit) { 
     super.onVisitStart(visit); 
     name=visit.getPlace().getName().toString(); 
     if (name!=null){ 
      respond(name); 
      barstatus2(); 
     } 
    } 

Verwendung

@Override 
protected void onStart() { 
    super.onStart(); 
    placeEventListener= new PlaceEventListener() { 
     @Override 
     public void onVisitStart(Visit visit) { 
      super.onVisitStart(visit); 
      name=visit.getPlace().getName(); 
      if (name!=null){ 
       respond(name); 
       barstatus2(); 
      } 
     } 
    }; 

ich kann Änderungen vornehmen ... können Sie mir erklären, warum ?? Ich möchte nicht, dass dieser Codeblock onStart() ausgeführt wird. Ich möchte, dass dieser Codeblock in einer Methode funktioniert.

+0

haben Sie Ihren Code zu debuggen versucht, besser zu verstehen, wo passiert der Fehler? Es wäre hilfreich, anstelle eines großen Teils des Codes die Methode oder Klasse zu haben, in der der Fehler auftritt. – Daniele

+0

bei com.eguide.dimitris.campusguide.mainActivity $ 1.onVisitStart (mainActivity.java:66) Das ist, wo der Fehler ist .... –

+0

ok, so dass Sie möglicherweise nicht alle Klassen in Ihrer Frage haben müssen. Bitte versuchen Sie, Ihre Frage etwas zu bereinigen, damit wir besser verstehen können, wo das Problem liegt. – Daniele

Antwort

-1

Sie müssen in Ihren textFragment wenig Veränderung machen, initialisieren TextView in onCreateView() Verfahren wie

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.text_fragment, container,false); 

    text1 = (TextView)getActivity().findViewById(R.id.textF); 
    text1.setText("Press Start button to find buildings near you"); 

    return view; 
} 
+0

Nicht arbeiten !!!! @Apurva wenn ich dies tue bekomme ich einen anderen Fehler: java.lang.RuntimeException: Kann nicht gestartet werden ComponentInfo {com.eguide.dimitris.campusguide/com.eguide.dimitris.campusguide.mainActivity}: android.view.InflateException: Binäre XML-Dateizeile # 35: Fehler beim Auffüllen des Klassenfragments -> und ti Punkte in dieser Codezeile in Hauptaktivität -> setContentView (R.layout.Hauptaktivität); –

+0

Ich habe deine Antwort funktioniert, aber es hat mein Problem nicht gelöst. Danke. –