2014-09-23 41 views
1

我創建一個註冊表單一個viewpager已由一個viewpager.I分成三個fragments.The三個片段連接可以遍歷throught與下一個和前一個按鈕片段片段之間傳遞值。我希望第一個和第二個片段的數據在第三個片段中可用。一個選項是使用sharedpreferences.Is還有其他方法。如何同時使用在機器人

主類:

package pl.looksok.viewpagerdemo; 

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.ViewPager; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 

public class MainActivity extends FragmentActivity { 
    ViewPager pager; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     MyPagerAdapter pageAdapter = new MyPagerAdapter(getSupportFragmentManager()); 
     pager = (ViewPager)findViewById(R.id.myViewPager); 
     pager.setAdapter(pageAdapter); 



    } 
    public void selectFragment(int position){ 
    pager.setCurrentItem(position, true); 
    // true is to animate the transaction 
    } 
} 

主要XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 

    <pl.looksok.viewpagerdemo.CustomViewPager 
     android:id="@+id/myViewPager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</RelativeLayout> 

第一個片段:

package pl.looksok.viewpagerdemo; 

import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.RelativeLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 

public class FragmentBlue extends Fragment { 
Button btnnext1; 
RelativeLayout frag1; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_blue, container, false); 
     btnnext1=(Button) view.findViewById(R.id.btnnext1); 
     frag1=(RelativeLayout) view.findViewById(R.id.frag1); 

     btnnext1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View view) { 


       ((MainActivity)getActivity()).selectFragment(1); 
      } 
     }); 

     return view; 
    } 
} 

第一個XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#4ECDC4" 
    android:id="@+id/frag1" 
    > 

<Button 
    android:id="@+id/btnnext1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:text="NEXT" /> 

<EditText 
    android:id="@+id/txtfname" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/txtmname" 
    android:layout_alignParentTop="true" 
    android:ems="10" 
    android:hint="FIRST NAME" > 

    <requestFocus /> 
</EditText> 

<EditText 
    android:id="@+id/txtmname" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/txtfname" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="24dp" 
    android:ems="10" 
    android:hint="MIDDLE NAME" /> 

<EditText 
    android:id="@+id/txtlname" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/txtmname" 
    android:layout_below="@+id/txtmname" 
    android:layout_marginTop="23dp" 
    android:ems="10" 
    android:hint="LAST NAME" /> 

<EditText 
    android:id="@+id/txtdob" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/txtlname" 
    android:layout_centerVertical="true" 
    android:ems="10" 
    android:hint="DOB" /> 

</RelativeLayout> 

第二片段:

package pl.looksok.viewpagerdemo; 

import android.content.Intent; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.RelativeLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 

public class FragmentGreen extends Fragment { 
Button btnnext2,btnprev2; 
RelativeLayout frag2; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_green, container, false); 
     btnnext2=(Button) view.findViewById(R.id.btnnext2); 
     btnprev2=(Button) view.findViewById(R.id.btnprev2); 
     frag2=(RelativeLayout) view.findViewById(R.id.frag2); 
     btnnext2.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View view) { 


       ((MainActivity)getActivity()).selectFragment(2); 

      } 
     }); 
     btnprev2.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       ((MainActivity)getActivity()).selectFragment(0); 

      } 
     }); 
     return view; 
    } 
} 

第二片段的XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#C7F464" 
    android:id="@+id/frag2" 
    > 
<Button 
    android:id="@+id/btnnext2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="60dp" 
    android:text="NEXT" /> 

<Button 
    android:id="@+id/btnprev2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_marginRight="68dp" 
    android:layout_toLeftOf="@+id/btnnext2" 
    android:text="PREV" /> 

<EditText 
    android:id="@+id/txtgender" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_alignRight="@+id/btnnext2" 
    android:ems="10" 
    android:hint="GENDER" /> 

<EditText 
    android:id="@+id/txtmaritalstatus" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/txtgender" 
    android:layout_below="@+id/txtgender" 
    android:layout_marginTop="24dp" 
    android:ems="10" 
    android:hint="MARITAL STATUS" > 

    <requestFocus /> 
</EditText> 

<EditText 
    android:id="@+id/txtoccupation" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/txtmaritalstatus" 
    android:layout_below="@+id/txtmaritalstatus" 
    android:layout_marginTop="23dp" 
    android:ems="10" 
    android:hint="OCCUPATION" /> 

<EditText 
    android:id="@+id/txtusername" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/txtoccupation" 
    android:layout_centerVertical="true" 
    android:ems="10" 
    android:hint="USERNAME" /> 

<EditText 
    android:id="@+id/txtpassword" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/txtusername" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="40dp" 
    android:ems="10" 
    android:hint="PASSWORD" 
    android:inputType="textPassword" /> 

</RelativeLayout> 

第三個片段:

package pl.looksok.viewpagerdemo; 

import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.support.v4.app.Fragment; 

public class FragmentPink extends Fragment { 
Button btnnext3,btnprev3; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_pink, container, false); 
     btnnext3=(Button) view.findViewById(R.id.btnnext3); 
     btnprev3=(Button) view.findViewById(R.id.btnprev3); 
     btnnext3.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 


      } 
     }); 
     btnprev3.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       ((MainActivity)getActivity()).selectFragment(1); 

      } 
     }); 
     return view; 
    } 
} 

第三個片段的XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FF6B6B"> 

<Button 
    android:id="@+id/btnnext3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:text="NEXT" /> 
<Button 
    android:id="@+id/btnprev3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:text="PREV" /> 

<EditText 
    android:id="@+id/txtaddress" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:ems="10" 
    android:hint="ADDRESS" > 

    <requestFocus /> 
</EditText> 

<EditText 
    android:id="@+id/txtdistrict" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/txtaddress" 
    android:layout_below="@+id/txtaddress" 
    android:layout_marginTop="30dp" 
    android:ems="10" 
    android:hint="DISTRICT" /> 

<EditText 
    android:id="@+id/txtstate" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/txtdistrict" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="41dp" 
    android:ems="10" 
    android:hint="STATE" /> 

<EditText 
    android:id="@+id/txtpincode" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/txtstate" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="50dp" 
    android:ems="10" 
    android:hint="PINCODE" /> 

</RelativeLayout> 

適配器:

package pl.looksok.viewpagerdemo; 

import java.util.ArrayList; 
import java.util.List; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

public class MyPagerAdapter extends FragmentPagerAdapter { 

    private List<Fragment> fragments; 

    public MyPagerAdapter(FragmentManager fm) { 
     super(fm); 
     this.fragments = new ArrayList<Fragment>(); 
     fragments.add(new FragmentBlue()); 
     fragments.add(new FragmentGreen()); 
     fragments.add(new FragmentPink()); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return fragments.get(position); 
    } 

    @Override 
    public int getCount() { 
     return fragments.size(); 
    } 
} 

我還創建其具有串values.I想知道如果我可以創建一個對象,並設置字段屬性爲該對象

的類的字段的類:

package pl.looksok.viewpagerdemo; 

import java.io.Serializable; 

public class RegistrationValues implements Serializable { 

    String fname; 
    String mname; 
    String lname; 
    String dob; 
    String gender; 
    String marital_status; 
    String occupation; 
    String username; 
    String password; 
    String address; 
    String district; 
    String state; 
    String pincode; 
    String nationality; 
    String email; 
    String phno; 
    String bank_acno; 
    String bank_branch; 
    String bank_ifsc; 
    String bank_swift; 

} 

所以問題是如何將第一個和第二個片段中的值傳遞到最後一個片段而不使用Sharedpreferences。

回答

1

最簡單的辦法是讓RegistrationValues實例駐留在您的MainActivity例如:

public class MainActivity extends FragmentActivity { 
    ViewPager pager; 
    RegistrationValues values; //add this 
    public RegistrationValues getValues() { //add this 
     return values; //add this 
    }; //add this 

在你的片段,用((MainActivity) getActivity()).getValues()更新的價值觀和第三片段或使實際得到的值。

注意:您也許應該保存values比如在你的MainActivityonSaveInstance,它在你的MainActivity恢復的onCreate

+0

你能告訴我如何將值放入值對象嗎? – 2014-09-23 09:56:48

+0

只需將RegistrationValues中的所有字段更改爲公共。然後在你的片段中使用'((MainActivity)getActivity())。getValues()。fname =「whatever」;'。在你的第三個片段中,你可以用相同的方式讀取所有的值。 – 2014-09-23 09:58:56

0

我認爲對於在片段之間傳遞的值,您可以使用監聽器和調度程序模式以及單例模式,這將管理監聽器和調度程序,因爲片段不是活動,您無法通過Intents傳遞值。

0

一個非常常見的模式爲所述片段,以提供通過該值可以被傳遞給它們的接口,以及使用所述含活性作爲樞紐。要查看這個示例,請使用Eclipse或Android Studio實例化新的主/明細流活動並查看ListActivity的代碼。

但我認爲在這種情況下,你可能不想這樣做。您的數據記錄看起來像您想要在持久層(Model)中維護的內容,可能會通過服務(Controller)進行變異,並根據需要將其拉入片段(View)中。將業務邏輯與用戶界面分開,並使用適配器保持數據同步。