1

我想從不同片段上的editTexts獲取一些文本。所以,我做什麼,首先是定義我mPager和mPagerAdapter:獲取不同片段上的EditText值

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和按鈕)。按鈕功能是,當我在最後一個片段(frament3)時,它將信息形式(不同的editTexts)發送到另一個活動。

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擴展片段{

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(上第一個片段),其餘部分爲空。

有人可以幫我嗎?

在此先感謝。

+0

您可以使用'SharedPreferences' – Si8

+0

在將其放入捆綁包之前,確保其餘的EditText值不爲空。 –

+0

我敢肯定我檢查過了,這沒有錯:( – Txispas

回答

0

最後我得到了一個接口,這是我想獲得已定義的片段soemthing的唯一途徑。

我的代碼得到這樣的:

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

希望這可以幫助別人!

以任何方式謝謝!

+0

如何發送數據活動片段 – influx

0

試試這個:

在你的第二個片段,通過額外的意圖和你的價值。例如:

在你第二個片段,這樣做:

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()上調用它即可。

現在,您可以使用這些字符串,無論您想要什麼地方。如果您想在其他地方使用這些值,請確保在開始時定義字符串,以便您可以在任何地方使用這些值。

希望這個答案可以幫助.. :)