ここで問題が発生し、多くのオンライン ソリューションを試しましたが、改善が見られませんでした。
アクティビティ A から、10 行のユーザー アカウントがあり、それぞれが次のアクティビティ B で設定できるさまざまなデータ セットで構成されています (概念は連絡先のようなもので、ユーザーの連絡先のレイアウトは他のものと同じですが、ユーザーの電子メールは異なります。電話番号など)。行 1 を選択すると、それぞれのデータを含むアクティビティ C に送られます。行 2 の場合、行 2 のデータはアクティビティ C に渡されます。
sharedpreferences を使用してデータを取得できますが、行を選択する if-else などの選択に基づいて取得すると、アクティビティ C に何も表示されません。コードの何が問題なのですか? ここの専門家は私の問題を指摘できますか?
A のスニペット コード:
btnDone = (Button)findViewById(R.id.btnDone);
btnDone.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent Intent = new Intent(ActivityA.this, ActivityC.class);
if (tableRow1.isFocused()){
Intent.putExtra("activity", "activity1");
startActivity(Intent);
finish();}
else if (tableRow2.isFocused()){
Intent.putExtra("activity", "activity2");
startActivity(Intent);
finish();}
else if (tableRow3.isFocused()){
Intent.putExtra("activity", "activity3");
startActivity(Intent);
finish();}
else if (tableRow4.isFocused()){
Intent.putExtra("activity", "activity4");
startActivity(Intent);
finish();}
else if (tableRow5.isFocused()){
Intent.putExtra("activity", "activity5");
startActivity(Intent);
finish();}
else if (tableRow6.isFocused()){
Intent.putExtra("activity", "activity6");
startActivity(Intent);
finish();}
else if (tableRow7.isFocused()){
Intent.putExtra("activity", "activity7");
startActivity(Intent);
finish();}
else if (tableRow8.isFocused()){
Intent.putExtra("activity", "activity8");
startActivity(Intent);
finish();}
else if (tableRow9.isFocused()){
Intent.putExtra("activity", "activity9");
startActivity(Intent);
finish();}
else if (tableRow10.isFocused()){
Intent.putExtra("activity", "activity10");
startActivity(Intent);
finish();}
C のスニペット コード:
// Assigns value
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
//String passedVar = getIntent().getStringExtra("activity");
etAccountName.setText(sp.getString("accountName2", ""));
etWanIp.setText(sp.getString("wanIp2", ""));
etLocalIp.setText(sp.getString("localIp2", ""));
etPort.setText(sp.getString("port2", ""));
etPassword.setText(sp.getString("password2", ""));
C のコードから、「2」を配置すると、どの行をクリックしても行 2 のデータが選択されます。これを克服するために、次のコードを使用しますが、C には何も渡されません。
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
String passedVar = getIntent().getStringExtra("activity");
//I tried before passedVar.equals("activity1")
if("activity1".equals(passedVar)){
etAccountName.setText(sp.getString("accountName1", ""));
etWanIp.setText(sp.getString("wanIp1", ""));
etLocalIp.setText(sp.getString("localIp1", ""));
etPort.setText(sp.getString("port1", ""));
etPassword.setText(sp.getString("password1", ""));}
else if("activity2".equals(passedVar)){
etAccountName.setText(sp.getString("accountName2", ""));
etWanIp.setText(sp.getString("wanIp2", ""));
etLocalIp.setText(sp.getString("localIp2", ""));
etPort.setText(sp.getString("port2", ""));
etPassword.setText(sp.getString("password2", ""));}
else if("activity3".equals(passedVar)){
etAccountName.setText(sp.getString("accountName3", ""));
etWanIp.setText(sp.getString("wanIp3", ""));
etLocalIp.setText(sp.getString("localIp3", ""));
etPort.setText(sp.getString("port3", ""));
etPassword.setText(sp.getString("password3", ""));}
isFocused() が使用される理由に関するコードの一部 (このアプリの所有者がそれを要求しているため):
tableRow1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tableRow1.setFocusableInTouchMode(true);
tableRow1.requestFocus();}});
B のコード:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.account_tab_content_setting);
this.initViews();
}
private void initViews(){
etAccountName = (EditText)this.findViewById(R.id.etAccountName);
etWanIp = (EditText)this.findViewById(R.id.etWanIp);
etLocalIp = (EditText)this.findViewById(R.id.etLocalIp);
etPort = (EditText)this.findViewById(R.id.etPort);
etPassword = (EditText)this.findViewById(R.id.etPassword);
// Assigns value
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
etAccountName.setText(sp.getString("accountName1", ""));
etWanIp.setText(sp.getString("wanIp1", ""));
etLocalIp.setText(sp.getString("localIp1", ""));
etPort.setText(sp.getString("port1", ""));
etPassword.setText(sp.getString("password1", ""));
etWanIp.setOnFocusChangeListener(new OnFocusChangeListener(){
@Override
public void onFocusChange(View arg0, boolean hasFocus) {
if(!hasFocus){
System.out.println("lost focus");
AccountSettingActivity1.this.saveSettings();}}});
}
private void saveSettings(){
String accountName1 = etAccountName.getText().toString();
String wanIp1 = etWanIp.getText().toString();
String localIp1 = etLocalIp.getText().toString();
String port1 = etPort.getText().toString();
String password1 = etPassword.getText().toString();
accountName1 = (accountName1.trim().length() == 0)? "User": accountName1;
wanIp1 = (wanIp1.trim().length() == 0)? "0.0.0.0": wanIp1;
localIp1 = (localIp1.trim().length() == 0)? "0.0.0.0": localIp1;
port1 = (port1.trim().length() == 0)? "8000": port1;
password1 = (password1.trim().length() == 0)? "xxxx": password1;
etAccountName.setText(accountName1);
etWanIp.setText(wanIp1);
etLocalIp.setText(localIp1);
etPort.setText(port1);
etPassword.setText(password1);
SharedPreferences.Editor editor = PreferenceManager
.getDefaultSharedPreferences(this).edit();
editor.putString("accountName1", etAccountName.getText().toString());
editor.putString("wanIp1", etWanIp.getText().toString());
editor.putString("localIp1", etLocalIp.getText().toString());
editor.putString("port1", etPort.getText().toString());
editor.putString("password1", etPassword.getText().toString());
editor.commit();
}
public void onBackPressed() {
saveSettings();
super.onBackPressed();
etAccountName = (EditText)findViewById(R.id.etAccountName);
etWanIp = (EditText)findViewById(R.id.etWanIp);
etLocalIp = (EditText)findViewById(R.id.etLocalIp);
etPort = (EditText)findViewById(R.id.etPort);
etPassword = (EditText)findViewById(R.id.etPassword);
String accountName1 = etAccountName.getText().toString();
String wanIp1 = etWanIp.getText().toString();
String localIp1 = etLocalIp.getText().toString();
String port1 = etPort.getText().toString();
String password1 = etPassword.getText().toString();
Intent i = new Intent(B.this, A.class);
i.putExtra("accountName1" ,accountName1);
i.putExtra("wanIp1" ,wanIp1);
i.putExtra("localIp1" ,localIp1);
i.putExtra("port1" ,port1);
i.putExtra("password1" ,password1);
setResult(RESULT_OK, i);
startActivity(i);
finish();
}
@Override
protected void onPause() {
// When user leaves this tab, saves the values
this.saveSettings();
super.onPause();
}
}