fragment.getview() null zurückgeben von Aktivität
Ich habe einen viewpager, dass die Gastgeber mehrere Fragmente. Einer von Ihnen, Frag1, soll erhalten, ein Objekt mit Daten und poplulate einige EditText mit diesen Daten.
Die Sache ist, wenn ich versuche, Zugriff auf das fragment von der Aktivität, getView() immer null zurück, so dass es unmöglich zu nennen Methoden der Frag1 Klasse. Ich bin mit LogCat zu prüfen, ob andere Variablen, die null sind, aber es scheint, dass das problem kommt von der getView() überprüfen.
Jede Idee, warum es null ist?
Tätigkeit code
(...)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_form1);
mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager());
final ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mAppSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
//When swiping between different app sections, select the corresponding tab.
//We can also use ActionBar.Tab#select() to do this if we have a reference to the
//Tab.
actionBar.setSelectedNavigationItem(position);
}
});
public static class AppSectionsPagerAdapter extends FragmentPagerAdapter {
public AppSectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return new Frag1();
case 1:
return new Frag2();
case 2:
return new Frag1();
case 3:
return new Frag1();
default:
return new Frag1();
}
}
@Override
public int getCount() {
return 4;
}
@Override
public CharSequence getPageTitle(int position) {
return "Section " + (position + 1);
}
}
public void Populate(Patient patient) {
Frag1 fragment =
(Frag1) mAppSectionsPagerAdapter.getItem(0);
Log.d(patient.getName(), "data check");
Log.d(fragment.hello(), "fragment check");
if (fragment.getView() == null) {
Log.d("*** DEBUG ***", "found the problem champ");
}
if(fragment != null) //could be null if not instantiated yet
{
if(fragment.getView() != null)
{
//no need to call if fragment's onDestroyView()
//has since been called.
fragment.setName(patient.getName());
Log.d(patient.getName(), "supbrah");//do what updates are required
}
}
}
Fragment code
public class Frag1 extends Fragment {
EditText name;
Spinner spinner;
AutoCompleteTextView textView;
AutoCompleteTextView textView1;
Spinner spinner1;
AutoCompleteTextView textView2;
View v;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
v = inflater.inflate(R.layout.activity_form, container, false);
name = (EditText) v.findViewById(R.id.name_edit);
return v;
}
public String hello() {
return "sup brah";
}
public String getName() {
String patient = name.getText().toString();
return patient;
}
public void setName(String text) {
name.setText(text, TextView.BufferType.EDITABLE);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mich korrigieren, wenn ich falsch Liege, aber sollten Sie nicht verwenden
getView().findViewById(R.id.name_edit);
und steckte es in onViewCreated?So, wie es jetzt nicht funktionieren sollte, imo.
Hier einige samplecode:
Hoffe, es hilft. 🙂
Versuchen Sie anrufen viewPager.getChildAt(int x); statt viewPagerAdapter.getItem(int x).getView();