Android studio Android studio错误,动态分配片段

Android studio Android studio错误,动态分配片段,android-studio,android-fragments,Android Studio,Android Fragments,试图在横向模式下打开额外的片段,在纵向模式下没有问题。任何帮助都将不胜感激 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.O

试图在横向模式下打开额外的片段,在纵向模式下没有问题。任何帮助都将不胜感激

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{
我有一个活动,有两个片段。下面的代码有助于确定是纵向模式还是横向模式。然后应执行以下操作。我有两个activity_main.xml文件。一个用于肖像,一个用于土地

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

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




    }
}
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);
            }
        }
    }
导入android.app.Activity;
导入android.os.Bundle;
导入android.support.v4.app.ListFragment;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
公共类LFragment扩展了ListFragment{
OnFragmentSendText mSendText;
公共接口OnFragmentSendText{
公共void onSentText(字符串文本);
}
公共部门(){
}
公共事务主任(活动){
超级转速计(活动);
试一试{
mSendText=(OnFragmentSendText)活动;
}catch(ClassCastException e){
抛出新的ClassCastException(activity.toString()+“必须实现OnFragmentSendText”);
}
}
创建视图上的公共视图(布局、充气机、视图组容器、捆绑包保存实例状态){
//膨胀片段布局文件
ViewGroup rootView=(ViewGroup)充气器。充气(R.layout.prof_布局,容器,false);
//创建数据源
字符串[]数据源={“A”、“B”、“C”、“D”、“E”};
//创建适配器
ArrayAdapter=新的ArrayAdapter(getActivity(),R.layout.row_layout,R.id.txtitem,datasource);
//将适配器绑定到listfragments
setListAdapter(适配器);
//跨配置更改保留listfragment实例
setRetainInstance(真);
返回rootView;
}
public void onListItemClick(列表视图l、视图视图、整数位置、长id){
ViewGroup ViewGroup=(ViewGroup)视图;
TextView txt=(TextView)viewGroup.findViewById(R.id.txtitem);
字符串值=(字符串)l.getItemAtPosition(位置);
mSendText.onSentText(值);
}
}
infoFragmentjava类

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




    }
}
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);
            }
        }
    }
导入android.app.Fragment;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageView;
导入android.widget.RatingBar;
导入android.widget.TextView;
公共类infoFragment扩展了片段{
文本视图度;
图像视图图像;
字符串文本;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
返回充气机。充气(R.layout.info_布局,容器,错误);
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
image=(ImageView)view.findViewById(R.id.ImageView);
RatingBar rating=(RatingBar)view.findViewById(R.id.RatingBar);
度=(TextView)视图.findViewById(R.id.TextView);
}
公共void setText(最终字符串){
度。设置文本(字符串);
//转换。。。
}
}
公共文本(){
新建MyTask().execute();
}
私有类MyTask扩展了AsyncTask{
@凌驾
受保护的字符串背景(字符串…字符串){
Bundle b=getArguments();
stringtext=b.getString(“文本”);
返回null;
}
受保护的void onPostExecute(字符串结果){setText(stringtext);
}
}
}

如果使用
SupportFramgentManager
,则
片段也应来自支持库

在infoFragment类中替换此导入:

import android.app.Fragment;
为此:

import android.support.v4.app.Fragment;

如果使用
SupportFramgentManager
,则
Fragment
也应来自支持库

在infoFragment类中替换此导入:

import android.app.Fragment;
为此:

import android.support.v4.app.Fragment;

谢谢,在我的infoFragment类中,它恰好是一个片段…我目前正在尝试保存用户选择的分级栏分级…因此,一旦他们返回,将显示相同的分级。在我的onViewCreate方法下,我实现了rating=((RatingBar)view.findViewById(R.id.RatingBar)).setOnRatingBarChangeListener(this);wmbPreference1=PreferenceManager.GetDefaultSharedReferences(此);但是使用“this”会出错。你能告诉我我做错了什么吗?你能发布一个新问题吗?然后我可以试着帮你@Juan Cruz Soler你能帮我解决我的风景问题吗:nvm我解决了它谢谢,在我的infoFragment类中,它恰好是一个片段…我目前正在尝试保存用户选择的评级栏评级…所以一旦他们返回,相同的评级将出现。在我的onViewCreate方法下,我实现了rating=((RatingBar)view.findViewById(R.id.RatingBar)).setOnRatingBarChangeListener(this);wmbPreference1=PreferenceManager.GetDefaultSharedReferences(此);但是使用“this”会出错。你能告诉我我做错了什么吗?你能发布一个新问题吗?然后我可以试着帮助你@Juan Cruz Soler你能帮我解决我的风景问题吗:nvm我解决了