我有一个简单布局的DialogFragment.我想添加一个片段(并在将来将此片段替换为另一个片段)到DialogFragment布局内的FrameLayout.但是,添加新片段的方法失败,并显示错误:
片段Fragment_AlertsManage {41e7cb68}“找不到ID 0x7f0b004f com.kennel39.diabeteslive_adtdev:ID / frameAlertsContainer的视图”
我检查了我的xml,尝试了不同的方法,并在stackoverflow上读了一些类似的问题,但我找不到解决方案.
public class DialogManageAlerts extends DialogFragment{static int patIEnt_ID;public static DialogManageAlerts newInstance(int given_patIEnt_ID){ DialogManageAlerts frag = new DialogManageAlerts(); patIEnt_ID = given_patIEnt_ID; Bundle bund = new Bundle(); bund.putInt("PatIEnt_ID", patIEnt_ID); frag.setArguments(bund); return frag;}@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) { VIEw mainVIEw = inflater.inflate(R.layout.dialog_alerts_master, container, false); getDialog().getwindow().requestFeature(Window.FEATURE_NO_Title); FragmentManager myFragmentManager = getFragmentManager(); FragmentTransaction myTransact = myFragmentManager.beginTransaction(); Fragment_AlertsManage manageAlertsFragment = new Fragment_AlertsManage(); myTransact.add(R.ID.frameAlertsContainer, manageAlertsFragment); myTransact.commit(); return mainVIEw;}
layout.dialog_alerts_master:
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:orIEntation="vertical" androID:background="@color/white_regular" > <linearLayout androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:padding="10dp" androID:background="@drawable/lower_border_background_white"> <TextVIEw androID:ID="@+ID/tvManageAlertsTitle" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:text="@string/manage_alerts_Title" androID:textAppearance="?androID:attr/textAppearanceLarge" androID:gravity="center_horizontal" /> </linearLayout> <FrameLayout androID:ID="@+ID/frameAlertsContainer" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" > </FrameLayout> </linearLayout>
和Fragment_AlertsManage类:
public class Fragment_AlertsManage extends Fragment implements OnClickListener { int patIEnt_ID; @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) { VIEw myVIEw = inflater.inflate(R.layout.fragment_alerts_manage, container, false); //Get buttons button btnAdd = (button)myVIEw.findVIEwByID(R.ID.btnAdDalert); btnAdd.setonClickListener(this); button btnBack = (button)myVIEw.findVIEwByID(R.ID.btnBack); btnBack.setonClickListener(this); //FILL CONTENT populateContent(myVIEw); return myVIEw; } @OverrIDe public voID onClick(VIEw v) { // Todo auto-generated method stub switch (v.getID()) { case R.ID.btnAdDalert: { //Switch fragment FragmentManager myFragmentManager = getFragmentManager(); FragmentTransaction myTransact = myFragmentManager.beginTransaction(); Fragment_AlertsAdd adDalertFragment = new Fragment_AlertsAdd(); myTransact.addToBackStack("PrevIoUs"); myTransact.replace(this.getVIEw().getID(), adDalertFragment); myTransact.commit(); break; } case R.ID.btnBack: { FragmentManager myFragmentManager = getFragmentManager(); FragmentTransaction myTransact = myFragmentManager.beginTransaction(); myTransact.remove(Fragment_AlertsManage.this); //Launch Home Intent homeIntent = new Intent(this.getActivity(), HomeActivity.class); homeIntent.putExtra("patIEnt_ID", patIEnt_ID); startActivity(homeIntent); getActivity().finish(); break; } } } public voID populateContent(VIEw myVIEw){ try { ArrayList<Alert> alerts = new RetrIEveAlerts(patIEnt_ID).execute().get(); ListVIEw List = (ListVIEw) myVIEw.findVIEwByID(R.ID.reminder_ListvIEw); Alertslistadapter alertsAdapter = new Alertslistadapter(this.getActivity(), alerts); List.setAdapter(alertsAdapter); } catch (InterruptedException e) { // Todo auto-generated catch block e.printstacktrace(); } catch (ExecutionException e) { // Todo auto-generated catch block e.printstacktrace(); } }
为什么我会收到此错误,我该怎么做才能解决?
解决方法:
getFragmentManager()上的doc:
Return the FragmentManager for interacting with fragments associated
with this fragment’s activity.
R.ID.frameAlertsContainer位于DialogFragment的布局中,而不是活动的布局,因此无法找到它.请尝试使用getChildFragmentManager().但是我无法判断这是否在onCreateVIEw()方法中有效,因为视图尚未与片段相关联.您可能需要将其放在onStart()或其他内容中.
总结以上是内存溢出为你收集整理的android – 找不到id的视图 – DialogFragment Fragment全部内容,希望文章能够帮你解决android – 找不到id的视图 – DialogFragment Fragment所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)