2016-07-02 4 views
0

У меня есть приложение, которое содержит 3-ступенчатую регистрационную активность. Эти 3 шага делятся на 3 фрагмента с помощью veiwpager для прокрутки назад и вперед, и на последнем шаге появляется кнопка регистрации, которая при нажатии данных будет отправлена ​​в базу данных, которая будет выполнена в действии Register.Отправлять данные из представления пейджера в действие

У меня возникла проблема с передачей всех данных, которые пользователь вводит в 3 фрагментах в действие Register.

Я думал о сохранении данных каждого фрагмента при прокрутке к следующему фрагменту, но я запутался!

Регистрация Активность:

public class Register extends FragmentActivity { 
    ViewPager pager; 

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

    pager = (ViewPager) findViewById(R.id.viewPager); 
    pager.setAdapter(new PageAdapter(getSupportFragmentManager())); 

    pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener(){ 
     // This method will be invoked when a new page becomes selected. 
     @Override 
     public void onPageSelected(int position) { 

     } 

     // This method will be invoked when the current page is scrolled 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     // Called when the scroll state changes: 
     // SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING 
     @Override 
     public void onPageScrollStateChanged(int state) { 
     // Code goes here 
     } 
    }); 
    } 

    private static String makeFragmentName(int viewPagerId, int index) { 
    return "android:switcher:" + viewPagerId + ":" + index; 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_register, menu); 
    return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
    } 
} 

Регистрация XML:

<android.support.v4.view.ViewPager 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/viewPager" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<android.support.v4.view.PagerTabStrip 
    android:id="@+id/pager_header" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="top" 
    android:paddingBottom="4dp" 
    android:paddingTop="4dp" /> 

</android.support.v4.view.ViewPager> 

Первый фрагмент:

public class personal_info_fragment extends Fragment { 

    private EditText fname,lname,pass,conf_pass,phone_nb,license_nb; 
    private Spinner age_spinner; 
    private RadioButton male_rb,female_rb; 
    private String first_name,last_name,license,phone,password,conf_password; 

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

    fname = (EditText) v.findViewById(R.id.fname); 
    lname = (EditText) v.findViewById(R.id.lname); 
    license_nb = (EditText) v.findViewById(R.id.license_nb); 
    pass = (EditText) v.findViewById(R.id.pass); 
    conf_pass = (EditText) v.findViewById(R.id.conf_pass); 
    phone_nb = (EditText) v.findViewById(R.id.phone_nb); 

    return v; 
    } 

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

    public static personal_info_fragment newInstance(String text) { 

    personal_info_fragment f = new personal_info_fragment(); 
    Bundle b = new Bundle(); 
    b.putString("msg", text); 

    f.setArguments(b); 

    return f; 
    } 
} 

Первый фрагмент XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="@string/personal_info" 
     android:id="@+id/textView3" 
     android:gravity="center" /> 

    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/fname" 
     android:hint="@string/fname"/> 

    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/lname" 
     android:layout_gravity="center_horizontal" 
     android:hint="@string/lname"/> 

    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/license_nb" 
     android:layout_gravity="center_horizontal" 
     android:hint="@string/license_nb"/> 

    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:inputType="textPassword" 
     android:ems="10" 
     android:id="@+id/pass" 
     android:layout_gravity="center_horizontal" 
     android:hint="@string/pass"/> 

    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:inputType="textPassword" 
     android:ems="10" 
     android:id="@+id/conf_pass" 
     android:layout_gravity="center_horizontal" 
     android:hint="@string/conf_pass"/> 

    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:inputType="phone" 
     android:ems="10" 
     android:id="@+id/phone_nb" 
     android:layout_gravity="center_horizontal" 
     android:hint="@string/phone"/> 

    <RadioGroup 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left" 
     android:orientation="horizontal"> 

     <RadioButton 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/male" 
      android:id="@+id/male_rb" /> 

     <RadioButton 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/female" 
      android:id="@+id/female_rb" /> 
    </RadioGroup> 

    <Spinner 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/age_spinner" /> 

</LinearLayout> 

второй и третий фрагменты аналогичны первому фрагменту.

адаптер Страница:

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

    @Override 
    public Fragment getItem(int pos) { 
    switch(pos) { 
     case 0: 
     return new personal_info_fragment(); 
     case 1: 
     return new medical_info_fragment(); 
     case 2: 
     return new car_info_fragment(); 
     default: 
     return null; 
    } 
    } 

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

    @Override 
    public CharSequence getPageTitle(int position) { 
    switch(position) { 
     case 0: 
     return "Personal Information"; 
     case 1: 
     return "Medical Information"; 
     case 2: 
     return "Car Information"; 
     default: 
     return null; 
    } 
    } 
} 

СПАСИБО заранее.

ответ

1

Вам необходимо создать интерфейс. Что-то вроде этого:

public interface ConnectActivityAndFragments { 
    void sendData(Bundle data); 
} 

Ваша деятельность должна реализовать этот интерфейс и переопределить этот метод:

@Override 
public void sendData(Bundle data) { 
    Fragment oneFr = new Fragment(); 
    oneFr.setArguments(data); 
    fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.frag_container, oneFr); 
    fragmentTransaction.commit(); 
} 

Теперь в вашем фрагменте вы должны получить экземпляр вашего интерфейса, приложите фрагмент к вашей деятельности, и вы будете иметь возможность использовать этот method.Something так:

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 

    try { 
     yourActivityControl = (ConnectActivityAndFragments) getActivity(); 

    } catch (ClassCastException ex) { 
      throw ex; 
    } 
} 
void getData(){ 
    yourActivityControl.sendData(Your Bundle with Data); 
} 
0

Рассмотрим эту идею:

A ViewPager Концепция в процессе регистрации, возможно, не лучшее решение здесь. View Pagers используются, чтобы упростить и ускорить навигацию, но теперь проблема возникает, когда вам нужно передать хороший объем данных/ввода.

Вероятным подходом было бы создать 3 Activitities. Например:

PersonalInformationActivity extends AppCompatActivity{} 

MedicalInformationActivity extends AppCompatActivity{} 

CarInformationActivity extends AppCompatActivity{} 

Вместо 3 Fragments плюс MainActivity, что делает ваши общие классы 4, вы будете в конечном итоге с помощью всего 3 классов, использующих этот подход, а затем вы можете просто передать дополнительные услуги от первой деятельности на второй и в третьем действии вы можете просто сделать свою регистрацию или что бы вы ни делали.

Так, в целом,

  • В первой деятельности, есть следующая кнопка, которая при нажатии на получает входной сигнал, введенный в первой активности и переходах во вторую активность (возможно использовать плавный переход здесь избегайте больших изменений в глазах пользователей, таких как Slide In, возможно).

  • Во втором действии извлеките с использованием намерения информацию из одного действия и сохраните в локальных переменных, поскольку пользователь вводит данные там. После этого, используя кнопку, подобную активности 1, при нажатии, передайте оба значения из одного действия и второго действия в последнее действие.

  • Наконец, извлеките значения из действий 1 и 2 в действие 3, и как только пользователь завершит ввод данных в формы в действии 3, вы можете легко отправить их или сохранить их!

Я надеюсь, что эта неисправность поможет вам получить представление.

+0

Я уже думал о вашем решении, которое, очевидно, является простым способом реализации такой деятельности, как вы сказали, но я новичок в работе с фрагментом, и я хочу научиться справляться с ними. В любом случае моя проблема решена и Спасибо за ваш совет. –

Смежные вопросы