Android-未找到片段的视图,正在更改片段
您好,目前我正在Android Studio上进行一个Android项目,我可以使用FragmentPagerAdapter切换片段,每个片段都使用根片段,因此当我使用一个片段时,它工作得非常好,但当我想要实现第二个片段时,它给了我以下错误: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
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!现在,就您的情况而言,请向我们展示布局的XMLactivity\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" />