【问题标题】:Get EditText value on different fragment获取不同片段上的 EditText 值
【发布时间】:2014-02-25 21:55:38
【问题描述】:

我正在尝试从editTexts 获取一些关于不同片段的文本。所以我首先要做的是定义我的mPagermPagerAdapter

a_Atenuacion 活动

public class a_Atenuacion extends FragmentActivity{

    private static final int NUM_PAGES = 3;
    /**
     * The pager widget, which handles animation and allows swiping horizontally to access previous
     * and next wizard steps.
     */
    private ViewPager mPager;

    /**
     * The pager adapter, which provides the pages to the view pager widget.
     */
    private PagerAdapter mPagerAdapter;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.a_dat_viewpager);

        // Instantiate a ViewPager and a PagerAdapter.
        mPager = (ViewPager) findViewById(R.id.pager);
        mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(mPagerAdapter);


    }
    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }
        @Override
        public Fragment getItem(int position) {
            switch(position){
                case 0:
                    return new a_Dat_Inicio1();
                case 1:
                    return new a_Dat_Inicio2();
                case 2:
                    return new a_Dat_Inicio3();
            }
            return null;
        }
        @Override
        public int getCount() {
            return NUM_PAGES;
        }
    }
}

然后我得到了我的 3 个片段类(第一个和第二个布局都有一个 editText,但第三个有一个 editText 和一个 button)。按钮功能是当我在最后一个片段(fragment3)中时,它采用信息形式(不同的editTexts)并发送到另一个活动。

a_Dat_Inicio1 片段

public class a_Dat_Inicio1 extends Fragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e("Test", "hello");
    }

    @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.a_dat_inicio1, container, false);

        return view;  
    }
}

a_Dat_Inicio3 片段

public class a_Dat_Inicio3 extends Fragment {

    EditText edit3;
    EditText edit2;
    EditText edit1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e("Test", "hello");
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

    }

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


        edit1 = (EditText)getActivity().findViewById(R.id.editText1);
        final String edit11 = edit1.getText().toString();
        edit2 = (EditText)getActivity().findViewById(R.id.editText2);
        final String edit22 = edit2.getText().toString();
        edit3 = (EditText)view.findViewById(R.id.editText3);
        final String edit33 = edit3.getText().toString();

        Button but=(Button) view.findViewById(R.id.button);

        but.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {

                //Creamos el bundle
                Bundle bundle = new Bundle();
                //Le ponemos la variable parametro con el contenido (key, valor)
                bundle.putString("edit3", edit33);
                bundle.putString("edit2", edit22);
                bundle.putString("edit1", edit11);
                Intent net= new Intent(v.getContext(),Prueba1.class);
                net.putExtras(bundle);
                startActivity(net);

            }
        });

        return view;
    }
}

最后我在另一个活动 (Prueba1.class) 上得到了捆绑,奇怪的是我只得到了 editText1 的结果(在第一个片段上),其余的都是空的。

谁能帮帮我?

提前致谢。

【问题讨论】:

  • 你可以使用SharedPreferences
  • 在将 EditText 的其余值放入捆绑包之前,确保它们不为空。
  • 我确定我查过了,没有错:(

标签: android android-fragments android-edittext android-viewpager android-fragmentactivity


【解决方案1】:

最后我克服了一个接口,这是我认为在已经定义的片段上获得一些东西的唯一方法。

我的代码是这样的:

第一次定义接口

public interface OnEditTextChanged {

public void onEditPressed1(String edit1);

public void onEditPressed2(String edit1);

public void onEditPressed3(String edit1);

然后是片段活动:

public class a_Dat_Inicio1 extends Fragment {

EditText edit;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.e("Test", "hello");
}

@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.a_1dat_inicio1, container, false);
    init (view);

    return view;
}

OnEditTextChanged editListener;
@Override
public void onAttach(Activity activity){
    super.onAttach(activity);
    try{
        editListener=(OnEditTextChanged) getActivity();
    }catch(ClassCastException e){
        throw new ClassCastException(activity.toString()+"must implemnt onEditPressed");
    }
}

private void init(View view) {
    edit=(EditText) view.findViewById(R.id.editText1);

    //cada vez que se modifique texto llamar
    edit.addTextChangedListener(new TextWatcher() {

        @Override
        public void afterTextChanged(Editable s) {
            final String edit11 = edit.getText().toString();
            editListener.onEditPressed1(edit11);

        }
    });

最后在我们的主要活动上,调用方法:

public class a_Atenuacion extends FragmentActivity implements OnEditTextChanged {

String dat1;
String dat2;
String dat3;

private static final int NUM_PAGES = 3;
private PagerAdapter mPagerAdapter;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.a_1dat_viewpager);

    // Instantiate a ViewPager and a PagerAdapter.
    mPager = (ViewPager) findViewById(R.id.pager);
    mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
    mPager.setAdapter(mPagerAdapter);


    //HERE DO WHATEVER YOU WANT WITH THE DATA CAUGTH ON THE EDIT 1 METHOD


}


@Override
public void onEditPressed1(String edit1) {

    if(mPager.getCurrentItem()==0){
        dat1=edit1;
        Toast bread = Toast.makeText(getApplicationContext(), "edit1", Toast.LENGTH_LONG);
        bread.show();
    }
}

希望这对某人有帮助!!!

无论如何谢谢!!!

【讨论】:

  • 如何将数据Activity发送到fragment
【解决方案2】:

试试这个:

在您的第二个片段中,传递额外的意图和您的价值。例如:

在你的第二个片段中,这样做:

Intent someintent = new Intent();
        //Some first result
        someintent.putExtra("your_value_one", your_value_one);
        //Some Second result
        someintent.putExtra("your_value_two", your_value_two);
        //Some third result
        someintent.putExtra("your_value_three", your_value_three);
        getActivity().setResult(getActivity().RESULT_OK,someintent);
        getActivity().finish();

在您想要此结果的其他片段中,在您的其他片段上执行此操作,如下所示:

1) 制作一些获取信息的方法。

private void getInfo() {

                    //Note: The values are coming from a diff activity or fragment and                 so the strings should match.
                    Intent data = new Intent();
            String first_value = data.getStringExtra("your_value_one");
                    String second_value = data.getStringExtra("your_value_two");
                    String third_value = data.getStringExtra("your_value_three");
            Log.i("First Value: ", first_value);
                    Log.i("First Value: ", second_value);
                    Log.i("First Value: ", third_value);

        }

创建此方法后,只需在您的 onActivityCreated() 上调用它即可。

现在您可以随心所欲地使用这些字符串。如果您想在其他任何地方使用这些值,请确保在一开始就定义您的字符串,以便您可以在任何地方使用这些值。

希望这个答案有帮助.. :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多