2012-04-21 54 views
0

我有一個片段容器和片段外的一些按鈕,它們與片段的內容交互。當我點擊按鈕時,我需要獲取文本元素中的信息。這是我現在所擁有的,但它不起作用。代碼來自片段尋呼機演示。Android:獲取訪問查看OnClickListener中的元素

Button bm = (Button) findViewById(R.id.bm); 
bm.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
    EditText editTextIn1 = (EditText) v.findViewById(R.id.editTextIn1); 
    } 
}); 

編輯 我用這個例子:

http://developer.android.com/reference/android/support/v13/app/FragmentStatePagerAdapter.html 

public class FragmentStatePagerSupport extends FragmentActivity { 
    static final int NUM_ITEMS = 10; 

    MyAdapter mAdapter; 

    ViewPager mPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.fragment_pager); 

     mAdapter = new MyAdapter(getSupportFragmentManager()); 

     mPager = (ViewPager)findViewById(R.id.pager); 
     mPager.setAdapter(mAdapter); 

     // Watch for button clicks. 
     Button button = (Button)findViewById(R.id.goto_first); 
     button.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       mPager.setCurrentItem(0); 
      } 
     }); 
     button = (Button)findViewById(R.id.goto_last); 
     button.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       mPager.setCurrentItem(NUM_ITEMS-1); 
      } 
     }); 
    } 

    public static class MyAdapter extends FragmentStatePagerAdapter { 
     public MyAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public int getCount() { 
      return NUM_ITEMS; 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return ArrayListFragment.newInstance(position); 
     } 
    } 

    public static class ArrayListFragment extends ListFragment { 
     int mNum; 

     /** 
     * Create a new instance of CountingFragment, providing "num" 
     * as an argument. 
     */ 
     static ArrayListFragment newInstance(int num) { 
      ArrayListFragment f = new ArrayListFragment(); 

      // Supply num input as an argument. 
      Bundle args = new Bundle(); 
      args.putInt("num", num); 
      f.setArguments(args); 

      return f; 
     } 

     /** 
     * When creating, retrieve this instance's number from its arguments. 
     */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      mNum = getArguments() != null ? getArguments().getInt("num") : 1; 
     } 

     /** 
     * The Fragment's UI is just a simple text view showing its 
     * instance number. 
     */ 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View v = inflater.inflate(R.layout.fragment_pager_list, container, false); 
      View tv = v.findViewById(R.id.text); 
      ((TextView)tv).setText("Fragment #" + mNum); 
      return v; 
     } 

     @Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 
      setListAdapter(new ArrayAdapter<String>(getActivity(), 
        android.R.layout.simple_list_item_1, Cheeses.sCheeseStrings)); 
     } 

     @Override 
     public void onListItemClick(ListView l, View v, int position, long id) { 
      Log.i("FragmentList", "Item clicked: " + id); 
     } 
    } 
} 
+0

你在說什麼「文字元素」? – 2012-04-21 17:59:33

+0

例如EditText editTextIn1這是躺在片段 – user1324936 2012-04-21 19:38:03

回答

6

在onCLickListener的V是指按鈕本身,並呼籲findViewByID按鈕意味着該按鈕正在通過它的孩子(其沒有任何)來查找EditText元素。如果這個代碼是在活動上運行,你可以做:

Button bm = (Button) findViewById(R.id.bm); 
bm.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
    EditText editTextIn1 = (EditText) findViewById(R.id.editTextIn1); 
    } 
}); 

交替,如果你有碎片的容器的引用(如FrameLayout裏或某事),你可以做

Button bm = (Button) findViewById(R.id.bm); 
bm.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
    EditText editTextIn1 = (EditText) myFragmentContainer.findViewById(R.id.editTextIn1); 
    } 
}); 
+0

謝謝你。這使它更好,但我仍然有問題。我有這個片段的東西,它總是預先加載元素。所以editTextIn1指向另一個比顯示。如何爲上面的代碼示例獲取正確的視圖上下文? – user1324936 2012-04-21 19:00:50

+0

我發現了這種營養 – user1324936 2012-04-21 22:32:04