2016-11-17 7 views
1

In meiner Android-Anwendung habe ich ein Einstellungslayout mit vier Eigenschaften. Sie können die Einstellungen von MainActivity und von NoticeActivity aufrufen. Dazu habe ich diese Methode überschrieben:So zeigen Sie bestimmte Eigenschaften in den Einstellungen an

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.action_settings: 
      Intent intent = new Intent(this, SettingsActivity.class); 
      startActivity(intent); 
      return true; 
    } 
} 

Um die Einstellungen zu zeigen, ich habe diese beiden Klassen:

public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     getFragmentManager().beginTransaction() 
      .replace(android.R.id.content, new SettingsFragment()) 
      .commit(); 
    } 
} 

public class SettingsFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // preference_general -> layout with 4 properties 
     addPreferencesFromResource(R.xml.preference_general); 
    } 
} 

Was ich tun möchte, ist: Wenn die Einstellungen aus dem MainActivity genannt werden, ich möchte alle vier Eigenschaften anzeigen, aber wenn von der NoticeActivity aufgerufen werden möchte ich nur die ersten drei zeigen.

Wie kann ich das tun, ohne ein zweites Layout zu erstellen?

Antwort

0

Sie können das tun, indem Sie einfach in beide activity.For Beispiel eine Konstante in Ihrer Absicht definieren:

Intent intent = new Intent(this, SettingsActivity.class); 
intent.putExtra("Activity","first_activity"); 
startActivity(intent); 

Denken Sie daran, den Namen „Aktivität“ in beiden Tätigkeiten gleich sein sollte. Und verwenden Sie die Überprüfung für den Aufruf bestimmter Einstellungen in Einstellungsaktivität. Zum Beispiel:

public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Intent i = getIntent(); 
    String checkingValue = i.getStringExtra("Activity"); 

    if(checkingValue != null){ //Or something else 
     //setting layout with four properties 
    }else{ 
     //setting layout with three properties 
    } 
} 
} 

Hoffe, diese Hilfe!

+0

Ich hab diese Idee auch. Aber dann habe ich zwei Layouts, die fast gleich sind. Und wenn ich Änderungen an den Einstellungen vornehmen möchte, muss ich zwei Layouts ändern. Ich denke irgendwann werde ich Probleme haben. – user7174483

+0

Versuchen Sie, einige Tasten nach Ihren Bedürfnissen zu verstecken. Machen Sie das Layout mit 4 Tasten und zum Anzeigen von 3 Tasten, verstecken Sie die 4. Taste. Es sollte helfen – Swr7der

0

Ich habe das funktioniert für mich. Ich weiß nicht, ob es gut programmiert ist.

public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    String activity = getIntent().getStringExtra("Activity"); // Before starting Intent, put class name as Extra 

    if (activity != null && activity.equals("Main")) { 
     getFragmentManager().beginTransaction() 
       .replace(android.R.id.content, new SettingsFragment_Main()) 
       .commit(); 
    } else { 
     getFragmentManager().beginTransaction() 
       .replace(android.R.id.content, new SettingsFragment_Notice()) 
       .commit(); 
    } 

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
    prefs.registerOnSharedPreferenceChangeListener(this); 
} 

public static class SettingsFragment_Main extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preference_general); 
    } 
} 

public static class SettingsFragment_Notice extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // first set layout, otherwise the preference will be null 
     addPreferencesFromResource(R.xml.preference_general); 

     // Disable the Preference 
     Preference preference = findPreference(Constants.FOLDER_DEST_SETTING_KEY); 
     preference.setEnabled(false); 
    } 
} 
} 
Verwandte Themen