2013-04-17 137 views
11

觀點我使用視圖尋呼機在我activity.I創建的視圖7頁。現在我想訪問我的活動內的頁面視圖。我將數據視爲空白。 在活動如何訪問從視圖尋呼機

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()); 
    } 
} 

我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) { 
    } 

} 

在R.layout.activity_single_entry XML我有EditText上和按鈕上用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> 

如果我裏面pageadapter

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

的OnClick按鈕,我想從編輯文本訪問數據的使用。

我能爲所有第一page.Not獲得價值。

+0

什麼是錯誤您收到?我發現lineLineout linearLayout =(LinearLayout)mPager.findViewWithTag(「lin」+ mPager.getCurrentItem()+ 1);'返回null – flexdroid

+0

有時它會拋出nullpointer.If我試着用getChildAt(pos)IllegalStateException拋出 –

+0

你有沒有考慮過從getItemPosition()方法返回實際值? – meh

回答

-1

一個快速的解決辦法是保持一個列表,你ExamplePagerAdapter和你addView()調用之後添加到它。然後你可以實現一個公共函數,比如getItemAtPosition(int position),它返回ViewPager頁面的LinearLayout。然後,您可以在Activity中的線性佈局上運行findViewById(R.id.edtFieldName)。在代碼:

在你ExamplePagerAdapter,添加一個私有對象:

List<LinearLayout> mItems; 

添加在構造函數:

mItems = new Vector<LinearLayout>(); 

加入instantiateItem():

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

再加入的方法:

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

然後使用該方法,在你的活動。希望這是你正在尋找的。

+0

感謝的答覆。以前我試過,但我取相同的數據是空白。 –

+0

無後顧之憂。這可能是使用getChildAt(工作)在你的ViewPager(mPager)另一個選擇在您的活動得到的LinearLayout的。我不知道這會的工作,但它可能是值得一試。 – Meehow

+0

沒有同樣的事情。如果你看到的代碼,我評論說,代碼,但同樣issue.Some一次火災例外。 –

8

firstm你setTag():

linearLayout.setTag("lin"+position); 

其中位置在< 0..numPages-1>

但閱讀:

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

是findViewWithTag返回null無處不或只在最後一頁上? mPager.getCurrentItem()返回0,如果它是第一頁,所以不需要在讀取時添加+1

+0

確定我得到它,你有空到處因爲對於II == 2的表達:「林」 + II + 1等於:「lin21」,而不是「LIN3」之一可以認爲 – pskink

+0

雅我知道了我編輯我的帖子謝謝。但仍然無法獲取數據。 –

+0

刪除行:edtFieldName = (的EditText)findViewById (R.id.edtFieldName); – pskink

0

在頁面適配器中,我在每個頁面中使用單個視圖,因此它僅引用第一項。如果我試圖獲取頁面的視圖,它只給我第一個對象,所以我在每個頁面中應用不同的編輯文本ID。

在頁適配器

@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; 
} 

它現在的工作

相關問題