2016-10-18 22 views
0

我想將數據從其他活動的onClick事件傳遞到上一個活動的FRAGMENT。我可以看到日誌,它顯示活動到主活動的值,但不能傳遞給主活動的片段。將值傳遞給通過其他活動的onClick事件進行其容器活動的兩個片段

我已經把這個鏈接的引用: Send string from an activity B to a fragment F of activity A

但我是一個初學者,有一個愚蠢的想法,我試過,不能得到預期的結果,而最重要的是,我真的不明白解決方案的想法。

我對界面的使用感到困惑,儘管在解決這個問題的過程中我已經閱讀了許多資源和案例。或者我可以使用另一種解決方案來實現此功能?

感謝您的任何幫助。

enter image description here

主要活動:

Fragment_step_1 getHashMapStep1 = new Fragment_step_1(); 
Fragment_step_2 getHashMapStep2 = new Fragment_step_2(); 
...... 
public void onCreate(Bundle savedInstanceState) { 
    ...... 
    if (savedInstanceState == null) { 
     Bundle extras = getIntent().getExtras(); 
     Bundle extrasFrag2 = getIntent().getExtras(); 
     boolean getFromConfirmPage = getIntent().getBooleanExtra("checkReturn", fromConfirm); 
     Log.e("boolean", String.valueOf(getFromConfirmPage)); 
     if(extras == null) { 
      getEmailFromID = null; 

     } else { 
      if(getFromConfirmPage){ 
       strFullName = extras.getString("ConfirmFullName"); 
       strIDNum = extras.getString("ConfirmIDNum"); 
       strDOB = extras.getString("ConfirmDOB"); 
       strPhone = extras.getString("ConfirmPhone"); 
       strEmail = extras.getString("ConfirmEmail"); 
       strAddress = extras.getString("ConfirmAddress"); 
       strPlanPrice = extras.getString("plan_price"); 
       strPlan_type = extras.getString("ConfirmPlanType"); 
       Bundle argsFrag1 = getHashMapStep1.getArguments(); 
       Bundle argsFrag2 = getHashMapStep2.getArguments(); 

       argsFrag1.putString("ConfirmFullName", strFullName); 
       argsFrag1.putString("ConfirmIDNum", strIDNum); 
       argsFrag1.putString("ConfirmPhone", strPhone); 
       argsFrag1.putString("ConfirmEmail", strEmail); 
       argsFrag2.putString("ConfirmDOB", strDOB); 
       argsFrag2.putString("ConfirmAddress", strAddress); 
       getHashMapStep1.setArguments(argsFrag1); 
       getHashMapStep2.setArguments(argsFrag2); 
       FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
       transaction.replace(R.id.fragmentPersonal, getHashMapStep1); 
       transaction.replace(R.id.fragment_correspondence, getHashMapStep2); 
       transaction.addToBackStack(null); 

       // Commit the transaction 
       transaction.commit(); 
      } else { 
       getEmailFromID = extras.getString("Email ID"); 
       strPlan_type = extras.getString("Plan_Type"); 
       strPlanPrice = extras.getString("Plan_Price"); 
      } 
     } 
     ...... 
     else { 
      Intent confirmInsure = new Intent(/*main_activity*/.this, /*activity_with_edit_btn*/.class); 
      Bundle extras = new Bundle(); 
      extras.putString("ConfirmFullName", strFullName); 
      extras.putString("confirmDOB", strDOB); 
      extras.putString("ConfirmIDNum", strIDNum); 
      extras.putString("ConfirmPhone", strPhone); 
      extras.putString("ConfirmEmail", strEmail); 
      extras.putString("ConfirmAddress", strAddress); 
      extras.putString("plan_type", strPlan_type); 
      extras.putString("plan_price", strPlanPrice); 
      confirmInsure.putExtras(extras); 
      startActivity(confirmInsure); 
     } 
    } 
...... 

} 

活性與 「編輯」 按鈕:

...... 
btn_editInfo.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View view){ 
      Intent confirmInsure = new Intent(/*activity_with_edit_btn*/.this, /*To_main_activity*/.class); 
      Bundle extras = new Bundle(); 
      extras.putString("ConfirmFullName", CustName); 
      extras.putString("ConfirmIDNum", IDNum); 
      extras.putString("ConfirmDOB", strDOB); 
      extras.putString("ConfirmPhone", PhoneNo); 
      extras.putString("ConfirmEmail", email); 
      extras.putString("ConfirmAddress", rAddress); 
      extras.putString("ConfirmPlanType", formatPlanType); 
      extras.putString("plan_price", planPrice); 
      extras.putBoolean("checkReturn", fromConfirm); 
      confirmInsure.putExtras(extras); 
      startActivity(confirmInsure); 
     } 
    }); 
...... 

片段1 & 2:

...... 
@Override //SHOULD I GET VALUES ON THIS METHOD? 
public void onActivityCreated(Bundle savedInstanceState){ 
    super.onActivityCreated(savedInstanceState); 
     Bundle args = this.getArguments(); 
     if (args != null) { 
      strName = args.getString("ConfirmFullName"); 
      strHKID = args.getString("ConfirmIDNum"); 
      strTel = args.getString("ConfirmPhone"); 
      strEmail = args.getString("ConfirmEmail"); 
      name.setText(strName); 
      HKIDNumber.setText(strHKID); 
      getEmail.setText(strEmail); 
      phone.setText(strTel); 
     } 
     //REMAIN TWO VALUES ARE GETTING ON FRAGMENT_2 
} 
...... 

回答

1

您可以使用DataHolder(Singleton)來保存這些值。你可以從你的第二個活動中設置價值,你可以得到你的片段(或者在整個應用程序中 - 無論你在哪裏)。 Singletons在整個應用程序中都有一個實例。它可以貫穿你的應用程序。您可以從活動,片段,接口等訪問它們,在活動片段,片段活動,片段片段之間保存數據並傳遞數據將會很有幫助。

創建DataHolder.java

public class DataHolder { 

private static DataHolder mInstance; 
private String name, idNumber, dob, address, planType; //fields you want 

//add all the fields you want--like email,phoneNUmber,etc., 

public static DataHolder getInstance() { 
    if (mInstance == null) 
     return mInstance = new DataHolder(); 
    else 
     return mInstance; 
} 

//getters and setters for the fields 

public String getAddress() { 
    return address; 
} 

public void setAddress(String address) { 
    this.address = address; 
} 

public String getDob() { 
    return dob; 
} 

public void setDob(String dob) { 
    this.dob = dob; 
} 

public String getIdNumber() { 
    return idNumber; 
} 

public void setIdNumber(String idNumber) { 
    this.idNumber = idNumber; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getPlanType() { 
    return planType; 
} 

public void setPlanType(String planType) { 
    this.planType = planType; 
} 

//define getters and setters for all defined fields 
} 

在你的活性2,

DataHolder holder; 
    btn_editInfo.setOnClickListener(new View.OnClickListener(){ 
    public void onClick(View view){ 
     holder = DataHolder.getInstance(); //Getting DataHolder Instance 
     holder.setName(CustName); 
     holder.setIdNumber(IDNum); 
     //set values for all fields using setters 
     //holder.setSomething(something); 

     //Start your first activity 
     Intent confirmInsure = new Intent(/*activity_with_edit_btn*/.this, /*To_main_activity*/.class); 
     startActivity(confirmInsure); 
    }}); 

在您的片段1和2,

DataHolder holder; 
    @Override 
    public void onActivityCreated(Bundle savedInstanceState){ 
     super.onActivityCreated(savedInstanceState); 
     holder = DataHolder.getInstance(); //get instance of DataHolder 
     name.setText(holder.getName());  //get customer name by getName() 
     // do the same for all fields 
     HKIDNumber.setText(holder.getIdNumber()); 
     getEmail.setText(holder.getEmail()); 
     phone.setText(holder.getPhNumber()); 
    } 

希望它會幫助你。

+0

@AithPandian感謝您的建議。主要活動就是刪除extra.getString/putString /上的那些代碼,還是保持不變? –

+0

@AjthPandian謝謝,我將學習更多關於Java的設計模式。 –

+0

刪除getString/putString不會影響這個。因爲getString/putString函數用於從Intent中獲取/獲取數據。在這種方法中不使用意圖。 –

相關問題