2016-07-11 5 views
1

versuchen, zusätzliche Fragment im Querformat zu öffnen, gibt es mir kein Problem im Hochformat. Jede Hilfe wäre willkommen.Android Studio Fehler bei der dynamischen Zuordnung von Fragment

MAIN Activity.java

import android.content.res.Configuration; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 


public class MainActivity extends AppCompatActivity implements LFragment.OnFragmentSendText{ 

Ich habe eine Aktivität mit zwei Fragmenten. Mit diesem Code können Sie bestimmen, ob Sie im Hoch- oder Querformat arbeiten. Dann sollten Sie Folgendes tun. Ich habe zwei activity_main.xml Dateien. Einer für Porträt und einer für Land.

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){ 
      if (savedInstanceState == null){ 
       getSupportFragmentManager().beginTransaction() 
         .add(R.id.container, new LFragment()) 
         .commit(); 
      } 
     } else { 
      if (savedInstanceState == null) { 
       getSupportFragmentManager().beginTransaction() 
         .add(R.id.container, new LFragment()) 
         .commit(); 
       getSupportFragmentManager().beginTransaction() 
         .add(R.id.container2, new infoFragment(), "fragment2") 
         .commit(); 
      } 
     } 
    } 

Description within image here

Hier bin ich definieren eine Methode aus der Schnittstelleninformationen aus dem ersten Fragment abzurufen. Der Versuch, den infoFragment (2-Fragment) zu nennen, aber ich erhalte eine Fehlermeldung, wenn ich diese implementieren

(infoFragment)  getSupportFragmentManager().findFragmentByTag("info"); 

Ich bin nicht sicher, warum

@Override 
    public void onSentText(String text) { 
     infoFragment info = (infoFragment)  getSupportFragmentManager().findFragmentByTag("info"); 
     if (info !=null){ 
      info.setText(text); 
     } else { 
      infoFragment fragment = new infoFragment(); 
      Bundle args = new Bundle(); 
      args.putString("text", text); 
      fragment.setArguments(args); 
      getSupportFragmentManager().beginTransaction() 
        .replace(R.id.container, fragment) 
        .addToBackStack(null).commit(); 
      fragment.sentText(); 
     } 
    } 
} 

Lfragment Java-Klasse

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.ListFragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

public class LFragment extends ListFragment { 
    OnFragmentSendText mSendText; 

    public interface OnFragmentSendText{ 
     public void onSentText(String text); 
    } 
    public LFragment(){ 

    } 
    public void onAttach(Activity activity){ 
     super.onAttach(activity); 
     try{ 
      mSendText = (OnFragmentSendText)activity; 
     } catch(ClassCastException e){ 
      throw new ClassCastException(activity.toString() + " must implement OnFragmentSendText"); 
     } 
    } 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){ 
     //inflate the fragment layout file 

     ViewGroup rootView =(ViewGroup)inflater.inflate(R.layout.prof_layout,container,false); 
     //create datasource 
     String[] datasource = {"A","B","C","D","E"}; 
     //create adapter 
     ArrayAdapter<String> adapter = new ArrayAdapter<String> (getActivity(),R.layout.row_layout,R.id.txtitem,datasource); 
     //bind adapter to the listfragments 
     setListAdapter(adapter); 
     //retain listfragment instance across configuration changes 
     setRetainInstance(true); 
     return rootView; 
    } 

    public void onListItemClick(ListView l, View view, int position, long id){ 
     ViewGroup viewGroup=(ViewGroup)view; 
     TextView txt=(TextView)viewGroup.findViewById(R.id.txtitem); 

     String value = (String) l.getItemAtPosition(position); 
     mSendText.onSentText(value); 




    } 
} 

InfoFragment Java-Klasse

import android.app.Fragment; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.RatingBar; 
import android.widget.TextView; 

public class infoFragment extends Fragment { 

    TextView degrees; 
    ImageView image; 
    String stringtext; 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.info_layout, container, false); 
    } 
    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState){ 
     image = (ImageView) view.findViewById(R.id.imageView); 
     RatingBar rating=(RatingBar) view.findViewById(R.id.ratingBar); 
     degrees=(TextView)view.findViewById(R.id.textView); 

    } 
    public void setText(final String string) { 
     degrees.setText(string); 

     //conversions... 
     } 
    } 

    public void sentText(){ 
     new MyTask().execute(); 

    } 

    private class MyTask extends AsyncTask<String, String, String> { 

     @Override 
     protected String doInBackground(String... strings) { 
      Bundle b = getArguments(); 
      stringtext = b.getString("text"); 
      return null; 
     } 

     protected void onPostExecute(String result){setText(stringtext); 
      } 
     } 
    } 

Antwort

0

Wenn Sie SupportFramgentManager verwenden, sollten Sie auch Fragment aus der Support-Bibliothek sein.

Ersetzen Sie diesen Import in Ihrer infoFragment Klasse:

import android.app.Fragment; 

mit diesem:

import android.support.v4.app.Fragment; 
+0

Danke, in meiner infoFragment Klasse, die ein Fragment sein geschieht ... Im derzeit die Bewertungsleiste zu retten versuchen, vom Benutzer gewählte Bewertung..so sobald sie zurückgehen, erscheint die gleiche Bewertung. Unter meiner onViewCreate-Methode implementiere ich rating = ((RatingBar) view.findViewById (R.id.ratingBar)). SetOnRatingBarChangeListener (this); wmbPreference1 = PreferenceManager.getDefaultSharedPreferences (this); aber bekomme einen Fehler bei der Verwendung von "this" Könntest du mir sagen, was mache ich falsch? – nameishi

+0

Könnten Sie bitte eine neue Frage stellen? Dann kann ich versuchen, Ihnen zu helfen –

+0

@ Juan Cruz Soler könnten Sie mir mit meinem Landschaftsproblem helfen: http: //stackoverflow.com/questions/38425797/android-my-landscape-screen-needs-tweakingportrait-works – nameishi

Verwandte Themen