So greifen Sie auf Ansichten von View Pager zu

Ich benutze View Pager in meiner Aktivität. Ich habe Ansichten für 7 Seiten erstellt. Jetzt möchte ich auf die Seitenansicht in meiner Aktivität zugreifen. Ich bekomme Daten als leer. In der Tätigkeit

public class ActivitySingleEntry extends Activity implements OnClickListener { private ViewPager mPager; private FixedTabsView mFixedTabs; private ExamplePagerAdapter mPagerAdapter; private TabsAdapter mFixedTabsAdapter; private EditText edtFieldName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fixed_tabs); initViewPager(7, 0xFFFFFFFF, 0xFF000000); mFixedTabs = (FixedTabsView) findViewById(R.id.fixed_tabs); mFixedTabsAdapter = new FixedTabsAdapter(this); mFixedTabs.setAdapter(mFixedTabsAdapter); mFixedTabs.setViewPager(mPager); } private void initViewPager(int pageCount, int backgroundColor, int textColor) { mPager = (ViewPager) findViewById(R.id.pager); mPagerAdapter = new ExamplePagerAdapter(this, pageCount, backgroundColor, textColor); mPager.setAdapter(mPagerAdapter); mPager.setCurrentItem(1); mPager.setPageMargin(5); } @Override public void onClick(View v) { // LinearLayout lin=(LinearLayout) mPager.getChildAt(mPager.getCurrentItem()); // edtFieldName=(EditText) lin.findViewById(R.id.edtFieldName); // Log.d("test", "From get child:"+edtFieldName.getText().toString()+":"); Log.d("test", "Current Page:"+mPager.getCurrentItem()); LinearLayout linearLayout=(LinearLayout) mPager.findViewWithTag("lin"+mPager.getCurrentItem()); edtFieldName=(EditText) linearLayout.findViewById(R.id.edtFieldName); edtFieldName=(EditText) findViewById(R.id.edtFieldName); if (edtFieldName==null) { ShowToast.makeToast(getApplicationContext(), "Edt null"); }else ShowToast.makeToast(getApplicationContext(), "Data saved " + edtFieldName.getText().toString() + ":" + mPager.getCurrentItem()); } } 

Mein PageAdaper

 public class ExamplePagerAdapter extends PagerAdapter { protected transient Activity mContext; private int mLength = 0; private int mBackgroundColor = 0xFFFFFFFF; private int mTextColor = 0xFF000000; private String[] mData = { "Temperature", "Sugar", "BP", "Field 4", "Field 5", "Field 6", "Field 7" }; public ExamplePagerAdapter(Activity context, int length, int backgroundColor, int textColor) { mContext = context; mLength = length; mBackgroundColor = backgroundColor; mTextColor = textColor; } @Override public int getCount() { return mLength; } @Override public Object instantiateItem(View container, int position) { LinearLayout linearLayout = (LinearLayout) View.inflate(mContext, R.layout.activity_single_entry, null); TextView txtFieldName = (TextView) linearLayout .findViewById(R.id.txtFieldName); EditText edtFieldName = (EditText) linearLayout .findViewById(R.id.edtFieldName); String filedName = mData[position]; txtFieldName.setText(filedName); edtFieldName.setHint("Please enter " + filedName); edtFieldName.setInputType(InputType.TYPE_CLASS_TEXT); if (filedName.equals("Temperature")) { edtFieldName.setInputType(InputType.TYPE_CLASS_NUMBER); } else if (filedName.equals("Sugar")) { edtFieldName.setInputType(InputType.TYPE_CLASS_NUMBER); } else if (filedName.equals("BP")) { edtFieldName.setInputType(InputType.TYPE_CLASS_NUMBER); } edtFieldName.setTag("edt"); ((ViewPager) container).addView(linearLayout, 0); linearLayout.setTag("lin"+position); Log.d("test", "Adapter creating item:"+position ); return linearLayout; } @Override public void destroyItem(View container, int position, Object view) { ((ViewPager) container).removeView((View) view); } @Override public boolean isViewFromObject(View view, Object object) { return view == ((View) object); } @Override public void finishUpdate(View container) { } @Override public void restoreState(Parcelable state, ClassLoader loader) { } @Override public Parcelable saveState() { return null; } @Override public void startUpdate(View container) { } } 

In R.layout.activity_single_entry xml habe ich edittext und knopf mit onclick.

MYXml

  <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/txtFieldName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> <EditText android:id="@+id/edtFieldName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_weight="1" android:hint="Please enter field value" /> </LinearLayout> <Button android:id="@+id/btnSave" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Save" android:layout_margin="20dp" android:onClick="onClick" /> </LinearLayout> 

Wenn ich innerhalb des Seitenadapters verwendet habe

 @Override public int getItemPosition(Object object) { // TODO Auto-generated method stub return POSITION_NONE; } 

OnClick of Button Ich möchte auf Daten aus Text bearbeiten.

Ich kann Wert für die erste Seite bekommen. Nicht für alle.

  • Android ViewPager Erkennung Vertical Swipe
  • FragmentPagerAdapter - wie man einen Swipe oder einen Tab klickt, wenn der Benutzer auf einen neuen Tab geht?
  • Aktivität Ergebnis Fragment Index Aus Reichweite: 0x20001
  • Erkennung von Touch / Tap-Ereignissen innerhalb eines Viewpagers
  • Kann nicht aktualisieren / aktualisieren Listenansicht in einem Fragment aus einem anderen Fragment in ViewPager
  • Wie kann ich einen ViewPager im Vollbildmodus anzeigen?
  • Lazy loading ViewPagers in einem ScrollView
  • Wie gehe ich mit dem Pager zurück?
  • 3 Solutions collect form web for “So greifen Sie auf Ansichten von View Pager zu”

    Firstm du setTag ():

     linearLayout.setTag("lin"+position); 

    Wo Position ist in <0..numPages-1>

    Aber lese es:

     LinearLayout linearLayout=(LinearLayout) mPager.findViewWithTag("lin"+mPager.getCurrentItem()); 

    Ist findViewWithTag immer null überall oder nur auf der letzten Seite? MPager.getCurrentItem () gibt 0 zurück, wenn es die erste Seite ist, also gibt es keine Notwendigkeit, +1 beim Lesen hinzuzufügen

    Im Seitenadapter verwende ich einzelne Ansicht in jeder Seite, also bezieht sie sich nur auf das erste Einzelteil. Wenn ich versuchte, Ansicht für die Seite zu erhalten, die es mir nur erstes Objekt gibt, so habe ich eine andere ID für die Bearbeitung von Text in jeder Seite angewendet.

    Im Seitenadapter

     @Override public Object instantiateItem(View container, int position) { LinearLayout linearLayout = (LinearLayout) View.inflate(mContext, R.layout.activity_single_entry, null); TextView txtFieldName = (TextView) linearLayout .findViewById(R.id.txtFieldName); EditText edtFieldName = (EditText) linearLayout .findViewById(R.id.edtFieldName); ***edtFieldName.setId(position);*** String filedName = mData[position]; txtFieldName.setText(filedName); edtFieldName.setHint("Please enter " + filedName); edtFieldName.setInputType(InputType.TYPE_CLASS_TEXT); if (filedName.equals("Temperature")) { edtFieldName.setInputType(InputType.TYPE_CLASS_NUMBER); } else if (filedName.equals("Sugar")) { edtFieldName.setInputType(InputType.TYPE_CLASS_NUMBER); } else if (filedName.equals("BP")) { edtFieldName.setInputType(InputType.TYPE_CLASS_NUMBER); } edtFieldName.setTag("edt"+position); ((ViewPager) container).addView(linearLayout, 0); mItems.add(linearLayout); linearLayout.setTag("lin"+position); Log.d("test", "Adapter creating item:"+position ); return linearLayout; } 

    Es funktioniert jetzt

    Eine schnelle Lösung wäre, eine Liste in Ihrem BeispielPagerAdapter zu behalten und es nach dem addView () Aufruf hinzuzufügen. Dann könntest du eine öffentliche Funktion wie getItemAtPosition (int position) implementieren, die das LinearLayout auf dieser Seite des ViewPagers zurückgibt. Dann kannst du findViewById (R.id.edtFieldName) auf diesem linearen Layout in deiner Aktivität ausführen. In Code:

    Fügen Sie in Ihrem BeispielPagerAdapter ein privates Objekt hinzu:

     List<LinearLayout> mItems; 

    Füge in dein Konstruktor hinzu:

     mItems = new Vector<LinearLayout>(); 

    Fügen Sie in instantiateItem () hinzu:

     ((ViewPager) container).addView(linearLayout, 0); mItems.add(linearLayout); 

    Dann füge eine Methode hinzu:

     public LinearLayout getItemAtPosition(int position) { return mItems.get(position); } 

    Dann benutze diese Methode in deiner Aktivität. Hoffe, es ist, was du gesucht hast.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.