从Fragment活动中访问片段的子级

时间:2013-01-10 16:22:58

标签: java android eclipse

我有一个定义为

的片段
public class AddValue extends Fragment 
{
    private int position;
    public EditText addEdit;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
       super.onCreate(savedInstanceState);
       Log.e("Test", "hello");
       position = getArguments().getInt("position");

    }

 /**
  * Handle the results from the voice recognition activity.
  */     
    @Override
    public void onActivityCreated(Bundle savedInstanceState) 
    {
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    {
       View view = inflater.inflate(R.layout.add_value, container, false);


       addEdit = (EditText) view.findViewById(R.id.editBox);

       if (position == 0)
           addEdit.setHint("Patient Id");
       if (position == 1)
           addEdit.setHint("Age");
       if (position == 2)
           addEdit.setHint("Height In Inches");
       if (position == 3)
           addEdit.setHint("Weight in lbs");
       if (position == 4)
           addEdit.setHint("LA Volume Index");



       return view;
     }

}

我有一个MainActivity extends FragmentActivity

现在我正在使用这个

FragAdapter myAdapter = (FragAdapter)   mPager.getAdapter();
             AddValue screen  = (AddValue) myAdapter.getItem(myPosition);
             EditText box = (EditText) screen.getView().findViewById(R.id.editBox);


    public class FragAdapter extends FragmentPagerAdapter 
    {
        public FragAdapter(FragmentManager fm) 
        {
            super(fm);
        }

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

        @Override
        public Fragment getItem(int position) 
        {
            AddValue val = new AddValue();
            Fragment frag = val;
            Bundle arg = new Bundle();
            arg.putInt("position", position);  
            frag.setArguments(arg);
            return frag;
        }

    }

如何从主要活动中访问EditText。

4 个答案:

答案 0 :(得分:0)

你的问题缺乏相当多的结构。你想在哪里到达EditText?你为什么要这个?也许一个不同的设置会更好。

无论如何,您可以将EditText设置为公共静态变量,以便从任何地方轻松访问它。在大多数情况下,这不是处理事情的好方法。

答案 1 :(得分:0)

如果您的AddValue片段是从xml实例化的,那么您可以这样: 在onActivityResult中添加以下内容:
AddValue fragment = getSupportFragmentManager().findFragmentById(R.id.host_fragment)
host_fragment是来自xml的片段的id。
if(fragment != null){
fragment.setText(textFromSpeech);
}

AddValue片段中添加方法public void setText(String text) { this.addEdit = text;}

祝你好运!

答案 2 :(得分:0)

得到了解决方案

 EditText text = (EditText) mPager.getChildAt(myPosition).findViewById(R.id.editBox);
         text.setText(matches.get(0));

答案 3 :(得分:0)

您可以使用Fragment类的getView方法进行访问。

例如,您的MyFragment中有一个TextView,其ID为" text_view"
在你的活动中制作你的片段:

MyFragment myFragment = new MyFragment();

当你需要一个孩子时,只需调用getView然后找到你的childView。

View view = myFragment.getView();
if (view !=null) {
view.findViewById(R.id.text_view).setText("Child Accessed :D");
}