Android-未找到片段的视图,正在更改片段

Android-未找到片段的视图,正在更改片段,android,android-fragments,Android,Android Fragments,您好,目前我正在Android Studio上进行一个Android项目,我可以使用FragmentPagerAdapter切换片段,每个片段都使用根片段,因此当我使用一个片段时,它工作得非常好,但当我想要实现第二个片段时,它给了我以下错误: java.lang.IllegalArgumentException: No view found for id 0x7f0c00ae (net.beardboy.aarcapp:id/root_frame_graphs) for fragment Gra

您好,目前我正在Android Studio上进行一个Android项目,我可以使用FragmentPagerAdapter切换片段,每个片段都使用根片段,因此当我使用一个片段时,它工作得非常好,但当我想要实现第二个片段时,它给了我以下错误:

java.lang.IllegalArgumentException: No view found for id 0x7f0c00ae (net.beardboy.aarcapp:id/root_frame_graphs) for fragment GraphsFragment{d178606 #0 id=0x7f0c00ae}
我使用getSupportFragmentManager()在片段之间交换,正如我第一次使用时所说,它工作得很好,但后来它给了我错误。这是我的代码:

public class MainActivity extends AppCompatActivity implements ReportsAdapter.ReportCallBacks {

    ProgressDialog progressDialogReports;
    ProgressDialog progressDialogGraphs;
    ProgressDialog progressDialogSettings;

    DrawerLayout drawerLayout;
    ViewPager viewPager;
    FragmentPagerAdapter fragmentPagerAdapter;
    Toolbar toolbar;
    User currentUser;
    SessionStateManager sessionStateManager;
    RequestQueue requestQueue;
    ReportsFragments reportsFragments;
    GraphsFragment graphsFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sessionStateManager = new SessionStateManager(this);
        currentUser = new User();
        currentUser = sessionStateManager.getCurrentUser();
        requestQueue = Volley.newRequestQueue(this);
        graphsFragment = new GraphsFragment();


        toolbar = (Toolbar) findViewById(R.id.toolbar_main);
        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabBarLayout);
        viewPager = (ViewPager) findViewById(R.id.viewPager);
        setSupportActionBar(toolbar);
        drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
        fragmentPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
            private static final int FRAGMENT_COUNT = 3;

            @Override
            public Fragment getItem(int position) {
                switch (position) {
                    case 0:

                        try {
                            getReportsdata();
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                        return new RootFragmentReports();
                    case 1:
                            getGraphsdata();

                        return new RootFragmentGraphs();
                    case 2:
                        return new RootFragmentSettings();
                }


                return null;
            }

            @Override
            public int getCount() {
                return FRAGMENT_COUNT;
            }

            @Override
            public CharSequence getPageTitle(int position) {

                switch (position) {
                    case 0:
                        return "Reportes";
                    case 1:
                        return "Graficas";
                    case 2:
                        return "Pagos";
                    default:
                        return null;
                }
            }
        };

        viewPager.setOffscreenPageLimit(3);
        viewPager.setAdapter(fragmentPagerAdapter);
        tabLayout.setupWithViewPager(viewPager);

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                invalidateOptionsMenu();
            }

            @Override
            public void onPageSelected(int position) {
                invalidateOptionsMenu();
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }

        });


    }


    public void getReportsdata() throws JSONException {

        progressDialogReports = ProgressDialog.show(MainActivity.this, getString(R.string.please_wait), getString(R.string.downloading_data), true, false);


        JSONObject jsonUser = new JSONObject();
        JSONObject jsonMain = new JSONObject();
        jsonUser.put(JSONKeys.KEY_ACCESS_TOKEN, currentUser.getAccess_token());
        jsonUser.put(JSONKeys.KEY_CLIENTE_ID, currentUser.getCilenteId());
        jsonUser.put(JSONKeys.KEY_NAME, currentUser.getName());
        jsonUser.put(JSONKeys.KEY_EMAIL, currentUser.getEmail());
        jsonMain.put(JSONKeys.KEY_AARC_USER, jsonUser);

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, JSONKeys.URL_REPORTES_POR_CLIENTE, jsonMain, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                progressDialogReports.dismiss();

                try {
                    ArrayList<JSONReport> jsonReports = (ArrayList<JSONReport>) JSONParser.parseJSONReport(response);
                    replaceFragment(jsonReports);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        progressDialogReports.dismiss();
                        Log.i("errr", error.toString());
                        DialogUtil.createSimpleDialog(MainActivity.this, getString(R.string.error_downloading_data), error.toString()).show();

                    }
                });
        int socketTimeout = 180000;//3 minutes - change to what you want
        RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
        jsonObjectRequest.setRetryPolicy(policy);
        requestQueue.add(jsonObjectRequest);


    }

    public void getGraphsdata() {

        ArrayList<Graph> graphArrayList = new ArrayList<>();

        for (int i = 0; i < 10; i++) {
            Graph graficas = new Graph();
            graficas.setAnalisis(i);
            graficas.setSucursal("descripcion" + i);
            graphArrayList.add(graficas);
        }




        ArrayList<Entry> entries = new ArrayList<>();

        entries.add(new Entry(2f, 0));
        entries.add(new Entry(4f, 1));
        entries.add(new Entry(3f, 2));
        entries.add(new Entry(4f, 3));


        LineDataSet dataset = new LineDataSet(entries, "Fecha");

        ArrayList<String> labels = new ArrayList<String>();
        labels.add("January");
        labels.add("February");
        labels.add("January");
        labels.add("February");

        replaceFragmentGraph(graphArrayList);

    }

    private void replaceFragment(ArrayList<JSONReport> jsonReports) {
        reportsFragments = new ReportsFragments();
        ReportsAdapter reportsAdapter;
        reportsAdapter = new ReportsAdapter(MainActivity.this, jsonReports);
        reportsAdapter.setReportAdapterCallBacks(MainActivity.this);
        reportsFragments.setComplaintsAdapter(reportsAdapter);
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.root_frame_actividades, reportsFragments)
                .commit();

    }


    private void replaceFragmentGraph(ArrayList<Graph> datos) {

        graphsFragment = new GraphsFragment();
        //Bundle bundle=new Bundle();
        //bundle.putParcelable("datos", (Parcelable) datos);
        //graphsFragment.setArguments(bundle);

        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.root_frame_graphsa, graphsFragment)
                //.addToBackStack(null)
                .commit();


    }


    @Override
    public void OnReportCallBacks(JSONReport jsonReport) {

        Intent intent = new Intent(this, ReportsDetailActivity.class);
        intent.putExtra(JSONKeys.KEY_FOLIOB, jsonReport.getFoliob());
        startActivity(intent);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_acitivity_main, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Intent intent = new Intent(this, SettingsActivity.class);
        startActivity(intent);
        return super.onOptionsItemSelected(item);
    }


}
fragments\u graphs.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.github.mikephil.charting.charts.LineChart
        android:id="@+id/linechart"
        android:layout_width="match_parent"
        android:layout_height="220dp"
        android:layout_margin="5dp" />

</RelativeLayout
fragment\u root\u fragment\u graficas.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/root_frame_graphs"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".fragments.RootFragmentGraphs">

</FrameLayout>

问题可能是因为您夸大了错误的布局(XML)-这意味着该布局文件中可能不存在
R.id.root\u frame\u图形。
您希望在布局文件中找到类似的内容(使用
FrameLayout
):



传递到FragmentTransaction.replace()中的ID(
R.ID.root\u frame\u graphs
)必须是setContentView()中指定布局的子级,我建议您在问题中包含该布局。我怀疑您可能面临与已解决的问题相同的问题

请您为Graph Fragments添加代码您可以为您的活动的onCreate添加代码,然后还包括您声明片段的XML吗?您好,感谢更新,请包括活动onCreate的代码。给你,谢谢@ishmaelMakitlaGreat!现在,就您的情况而言,请向我们展示布局的XML
activity\u main
,虽然您可能认为错误布局文件的概念被夸大是正确的,但句子
明确地说,您必须在XML文件中同时包含两个片段,在使用上下文中
replace()
,这将取消整体资格answer@MarcinOrlowski,我理解你的观点-但也许我被误导了,他指的是两个不同的ID-
root\u frame\u actividades
root\u frame\u graphs
-这让我觉得他两者都有“占位符”…我希望这是有意义的。但你的回答仍然是我引用的句子,这完全是错误的,由于您无法从代码中删除未添加的片段。
public class RootFragmentGraphs extends Fragment{
    private static final String TAG = "RootFragmentGraphs";

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

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



        return view;
    }


}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/root_frame_graphs"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".fragments.RootFragmentGraphs">

</FrameLayout>
<FrameLayout android:id="@+id/root_frame_graphs"              
  android:...
  android:layout_height="match_parent" />