Android 如何在设置中显示特定属性

Android 如何在设置中显示特定属性,android,android-layout,Android,Android Layout,在我的Android应用程序中,我有一个带有四个属性的设置布局。 您可以从main活动和通知活动调用设置。为此,我已覆盖此方法: @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_settings: Intent intent = new Intent(this, Settin

在我的Android应用程序中,我有一个带有四个属性的设置布局。 您可以从
main活动
通知活动
调用设置。为此,我已覆盖此方法:

 @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;
    }
 }
要显示设置,我有以下两个类:

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);
   }
}
我想做的是:如果从
main活动
调用设置,我想显示所有四个属性,但是如果从
NoticeActivity
调用设置,我只想显示前三个属性


如何在不创建第二个布局的情况下执行此操作?

您可以通过在两个活动的意图中定义一些常量来执行此操作。例如:

Intent intent = new Intent(this, SettingsActivity.class);
intent.putExtra("Activity","first_activity");
startActivity(intent);
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
   }
}
}
记住,两个活动中的“活动”名称应该相同。 并在设置活动中使用检查调用特定设置。例如:

Intent intent = new Intent(this, SettingsActivity.class);
intent.putExtra("Activity","first_activity");
startActivity(intent);
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
   }
}
}

希望这有帮助

您只需在两个活动的意图中定义一些常量即可做到这一点。例如:

Intent intent = new Intent(this, SettingsActivity.class);
intent.putExtra("Activity","first_activity");
startActivity(intent);
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
   }
}
}
记住,两个活动中的“活动”名称应该相同。 并在设置活动中使用检查调用特定设置。例如:

Intent intent = new Intent(this, SettingsActivity.class);
intent.putExtra("Activity","first_activity");
startActivity(intent);
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
   }
}
}

希望这有帮助

我让它为我工作。不知道它是否编程良好

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);
    }
}
}

我让它为我工作。不知道它是否编程良好

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);
    }
}
}

我也有这个想法。但是我有两个几乎相同的布局。如果我想更改设置,我必须更改两个布局。我想在某个时候我会因此而遇到问题。根据你的需要,试着隐藏一些按钮。用4个按钮进行布局,为了显示3个按钮,隐藏第4个按钮。这也应该有助于我实现这个想法。但是我有两个几乎相同的布局。如果我想更改设置,我必须更改两个布局。我想在某个时候我会因此而遇到问题。根据你的需要,试着隐藏一些按钮。使用4个按钮进行布局,如果要显示3个按钮,请隐藏第4个按钮。这应该会有所帮助