Na maior parte, reorganizar a hierarquia de Configurações é relativamente
direta e normalmente consiste em mover a preferência relevante e
PreferenceController
para um arquivo XML diferente. Se o
PreferenceController
usa use(...)
. Não se esqueça de remover
da SettingsFragment
anterior e adicionar à nova
SettingsFragment
Esta página fornece exemplos de reordenação das configurações para analisar situações que podem ocorrer.
Mover uma preferência básica
Este exemplo explica como mover uma preferência de uma tela de preferências para outra,
em que a preferência tem apenas um controlador de preferências padrão. Neste exemplo,
mover a preferência de unidades da tela de preferências da página inicial para a seção de preferências do sistema
tela. Para isso, mova o seguinte XML de homepage_fragment.xml
para a
local apropriado em system_settings_fragment.xml
:
<Preference android:icon="@drawable/ic_settings_units" android:key="@string/pk_units_settings_entry" android:title="@string/units_settings" settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController"> <intent android:targetPackage="com.android.car.settings" android:targetClass="com.android.car.settings.common.CarSettingActivities$UnitsSettingsActivity"/> </Preference>
Mover uma preferência que usa use(...)
Considere o exemplo mais complexo a seguir, que move todas as preferências
na seção "Data Warning & Limite o fragmento um nível acima no fragmento de uso de dados, o que
atualiza o DataWarningAndLimitFragment.java
para incluir o método use
;
para transmitir informações para os controladores de preferências após a construção.
- Mova o XML relevante para o local desejado em
data_usage_fragment.xml
:<Preference android:key="@string/pk_data_usage_cycle" android:title="@string/app_usage_cycle" settings:controller="com.android.car.settings.datausage.CycleResetDayOfMonthPickerPreferenceController"/> <com.android.car.settings.common.LogicalPreferenceGroup android:key="@string/pk_data_warning_group" settings:controller="com.android.car.settings.datausage.DataWarningPreferenceController"> <SwitchPreference android:key="@string/pk_data_set_warning" android:title="@string/set_data_warning"/> <Preference android:key="@string/pk_data_warning" android:title="@string/data_warning"/> </com.android.car.settings.common.LogicalPreferenceGroup> <com.android.car.settings.common.LogicalPreferenceGroup android:key="@string/pk_data_limit_group" settings:controller="com.android.car.settings.datausage.DataLimitPreferenceController"> <SwitchPreference android:key="@string/pk_data_set_limit" android:title="@string/set_data_limit"/> <Preference android:key="@string/pk_data_limit" android:title="@string/data_limit"/> </com.android.car.settings.common.LogicalPreferenceGroup>
- No
DataWarningAndLimitFragment.java
, determine como ouse
é usado.@Override public void onAttach(Context context) { super.onAttach(context); mPolicyEditor = new NetworkPolicyEditor(NetworkPolicyManager.from(context)); mNetworkTemplate = getArguments().getParcelable( NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE); if (mNetworkTemplate == null) { mTelephonyManager = context.getSystemService(TelephonyManager.class); mSubscriptionManager = context.getSystemService(SubscriptionManager.class); mNetworkTemplate = DataUsageUtils.getMobileNetworkTemplate(mTelephonyManager, DataUsageUtils.getDefaultSubscriptionId(mSubscriptionManager)); } // Loads the current policies to the policy editor cache. mPolicyEditor.read(); List<DataWarningAndLimitBasePreferenceController> preferenceControllers = Arrays.asList( use(CycleResetDayOfMonthPickerPreferenceController.class, R.string.pk_data_usage_cycle), use(DataWarningPreferenceController.class, R.string.pk_data_warning_group), use(DataLimitPreferenceController.class, R.string.pk_data_limit_group)); for (DataWarningAndLimitBasePreferenceController preferenceController : preferenceControllers) { preferenceController.setNetworkPolicyEditor(mPolicyEditor); preferenceController.setNetworkTemplate(mNetworkTemplate); } }
Nesse caso, o método
use
define o editor de políticas de rede. e o modelo de rede para os controladores de preferência. Como este exemplo move todos as preferências e todo o código no métodoonAttach
é relevante para ao definir esses parâmetros de preferência, seria apropriado copiar toda a conteúdos do método no novo fragmento. No entanto, isso varia de acordo com uma preferência específica. Você também precisa mover as variáveis de instância relevantes.No entanto, há uma complicação. O fragmento original esperado
NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE
restantes passados como argumento, que devem vir da intent para a atividade (quando fornecido).Para acessar as informações necessárias, crie uma
newInstance
e passar o modelo quando presente (caso contrário, passa o valor nulo) e, em seguida, atualizar a atividade para aDataUsageFragment
ou receber a intent diretamente no métodoonAttach
usandogetActivity().getIntent()
. Em ambos os casos, é possível passar o valor as informações necessárias para esse método, como você fez acima. - Identifique quaisquer outras dependências ou ações de intent esperadas no fragmento antigo antes. limpar os fragmentos antigos e arquivos XML. Nesse caso, uma sobreposição valor de configuração aponta para a atividade antiga, que precisa ser atualizada para apontar para a atividade correta.
Adicionar uma tela de preferências à hierarquia
Para adicionar uma nova tela de preferências à hierarquia, consulte Adicionar configurações do carro.
Depois de criar a nova tela de preferências, use os exemplos acima para reorganizar a a hierarquia de preferências conforme desejado.