2017-06-13 43 views
0

我在android中有這個留言本應用程序。該應用程序的結構有點像這樣。 (使用意圖把額外的(密碼)) - > MainActivity(獲得Extra,FragmentManager) - > TabFragment - >(ChildFragment)Fragment1,Fragment2,SettingFragment等等。從ChildFragment傳遞變量到一個Activity Android

我在SettingFragment中有Edittext來更改要用於在LoginActivity中登錄的密碼。通過使用getText,我獲得了edittext的值並將其存儲在變量中。

問題是,我從SettingFragment獲得的變量在LoginActivity中返回null。有什麼辦法來獲得變量?在此先感謝

下面是我LoginActivity代碼

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.login_layout); 
    admin = (Button) findViewById(R.id.btn_admin); 
    user = (TextView) findViewById(R.id.btn_user); 
    txtAdmin = (EditText) findViewById(R.id.input_pin); 

    admin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      login(); 
     } 
    }); 

    user.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent i = new Intent(LoginActivity.this, MainActivity.class); 
      i.putExtra("key", "user"); 
      startActivity(i); 
     } 
    }); 
} 

public void login(){ 
     if (txtAdmin.getText().toString().equals(SettingFragment.getPin)) { 
      Intent i = new Intent(LoginActivity.this, MainActivity.class); 
      i.putExtra("key", SettingFragment.getPin); 
      startActivity(i); 
     } else { 
      Toast.makeText(getApplicationContext(), "Wrong PIN", Toast.LENGTH_SHORT).show(); 
     } 
} 

SettingFragment

String setPin; 
public static String getPin; 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.setting_layout, container, false); 
    setPin = (EditText) v.findViewById(R.id.pin); 

    save = (Button) v.findViewById(R.id.save); 

    save.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      getPin = setPin.getText().toString(); 
     } 
    } 
} 
+0

你想要密碼的時候你使用的應用程序,或者你會在下次打開應用程序時使用它? – sumit

+0

我需要密碼的時間應用程序啓動...它首次啓動LoginActivity – BrenDonie

+0

你需要保存密碼在'sharedpreference'。所以你可以在下次運行你的應用時使用它。 –

回答

0

U可以添加一個方法來LoginActivity稱爲setPassword(字符串密碼),然後調用在settingsFragment年代的onclick監聽器的方法保存按鈕 或更好:您可以添加觀察者到SettingFragment。

+0

我認爲它的另一種方式,,,我在SettingFragment中設置一個方法來設置密碼並在oncreate LoginActivity中調用它... cuz我需要從SettingFragment中的Edittext的密碼登錄 – BrenDonie

+0

ur方法無效,ur應用程序的工作流程是首先啓動LoginActivity,然後啓動MainActivity,當MainActivity變爲可見時,LoginActivity將在在堆棧底部,MainActivity將位於堆棧中的LoginActivity之上。在SettingFragment中輸入密碼並再次進入LoginActivity後,MainActivity將首先彈出。這就是爲什麼你得到null的原因,你永遠不知道什麼時候SettingFragment(int MainActivity)類將被回收。 – kevin

+0

這是一個更好的解決方案,在LoginActivity中設置密碼,當你輸入密碼int settingfragment或保存在數據庫或sp – kevin

相關問題