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つはランド用です。
@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);
}
}
}
おかげで、フラグメントであることを起こる私のinfoFragmentクラスに...イムは、現在ratingBarを保存しようとしていますユーザーによって選択された評価。一度戻ると同じ評価が表示されます。私のonViewCreateメソッドの下で、私はrating =((RatingBar)view.findViewById(R.id.ratingBar))を実装しています)setOnRatingBarChangeListener(this); wmbPreference1 = PreferenceManager.getDefaultSharedPreferences(this); "this"を使用するとエラーが表示されます。何が間違っているのか教えてください。 – nameishi
新しい質問を投稿できますか?それから私はあなたを助けることを試みることができます –
@ Juan Cruz Solerは私の風景問題で私を助けてくれますか?http://stackoverflow.com/questions/38425797/android-my-landscape-screen-needs-tweakingportrait-works – nameishi