2016-07-11 9 views
1

追加のフラグメントを横長モードで開こうとすると、ポートレートモードで問題は発生しません。どんな助けもありがとう。Androidスタジオ動的に割り当てているエラー

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{ 

私は2つの断片と1つの活性を有します。以下のコードは、ポートレートモードかランドスケープモードかを判断するのに役立ちます。私は2つのactivity_main.xmlファイルを持っています。 1つはポートレート用、もう1つはランド用です。

Description within image here

@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(); 
      } 
     } 
    } 

は、ここで私は、最初のフラグメントからの情報を取得するためのインタフェースからメソッドを定義しています。 infoFragment(第二の断片)を呼び出そうとしたが、私はこの

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

を実装したら、私はエラーを取得する私はわからない、なぜ

@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クラス

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クラス

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); 
      } 
     } 
    } 

答えて

0

SupportFramgentManagerを使用する場合は、Fragmentもサポートライブラリから取得する必要があります。

あなたinfoFragmentクラスで、このインポートを置き換えます。これで

import android.app.Fragment; 

を:

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

おかげで、フラグメントであることを起こる私のinfoFragmentクラスに...イムは、現在ratingBarを保存しようとしていますユーザーによって選択された評価。一度戻ると同じ評価が表示されます。私のonViewCreateメソッドの下で、私はrating =((RatingBar)view.findViewById(R.id.ratingBar))を実装しています)setOnRatingBarChangeListener(this); wmbPreference1 = PreferenceManager.getDefaultSharedPreferences(this); "this"を使用するとエラーが表示されます。何が間違っているのか教えてください。 – nameishi

+0

新しい質問を投稿できますか?それから私はあなたを助けることを試みることができます –

+0

@ Juan Cruz Solerは私の風景問題で私を助けてくれますか?http://stackoverflow.com/questions/38425797/android-my-landscape-screen-needs-tweakingportrait-works – nameishi

関連する問題