programacion - manual de android en pdf
Lanzar nueva actividad desde PreferenceActivity (5)
Buen dia amigos. Tengo una actividad de preferencia, está llena de un archivo XML. Cuando presionamos un elemento, debemos iniciar una nueva actividad. ¿Cómo hacerlo? ¿Qué debo escribir en XML-file o en la clase Java?
Gradle Builders, ¡mira por aquí!
Si está utilizando gradle over ant como herramienta de compilación, y declaró una applicationId
dentro de android
.
[build.gradle]:
android {
defaultConfig {
...
applicationId "com.overriding.package.name"
}
...
}
¡Esto sobrescribirá el valor que haya declarado en AndroidManifest.xml
android:package
como el identificador único de su aplicación!
[AndroidManifest.xml]
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.my.package">
<activity android:name=".settings.MyActivity"/>
</manifest>
¡El <intent>
debería tener en cuenta ambos nombres de paquete!
<Preference
android:title="Some Title"
android:summary="Some Description">
<intent
android:targetPackage="com.overriding.package.name"
android:targetClass="com.my.package.settings.MyActivity/>
</Preference>
Dado que está utilizando las preferencias xml, puede agregar código directamente en el xml:
<Preference
android:title="Some Title"
android:summary="Some Description">
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.package.name"
android:targetClass="com.package.name.ActivityName"
/>
</Preference>
Debe registrar onClickListener en la vista en la que desea iniciar la actividad. Luego, dentro de este método, solo necesita invocar la actividad con un intento. Algo como esto:
Intent intent = new Intent(this, ActivityToLaunch.class);
// Start boardgame
startActivity(intent);
Después de agregar preferencias usando
addPreferencesFromResource(R.xml.preferences);
encuentre su preferencia que desee establecer enClick usando
findPreference("foo_bar_pref");
y definirlo lanzando como
Preference fooBarPref = (Preference) findPreference("foo_bar_pref");
Luego puede establecer fácilmente su onClick usando
fooBarPref.setOnPreferenceClickListener (new OnPreferenceClickListener()){...}
Puedes comenzar tu nueva actividad (usando un Intento) dentro de ese oyente.
Este es un buen tutorial para agregar preferencias dinámicamente ... luego tienes que personalizarlo a tu manera.
En XMl:
<Preference android:key="key" android:title="See Android Market"></Preference>
En la clase de Java:
Preferences preferences=findPreference("key");
preferences.setIntent(new Intent(Intent.ACTION_VIEW,Uri.parse("https://market.android.com/")));
O
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.DialogPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
import android.widget.LinearLayout;
import android.widget.ListView;
public class SettingsActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Some initializations */
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
ListView listView = new ListView(this);
listView.setId(android.R.id.list);
listView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT, 1));
layout.addView(listView);
this.setContentView(layout);
/* Preferences time! (we build the preferences) */
Preference version = getPreference("My School Manager", "Version 2.0",null);
Preference author = getPreference("Author", "Balu", null);
Preference marketLink = getPreference("Android market","View all my apps :)",new Intent(Intent.ACTION_VIEW, Uri.parse("http://market.android.com/")));
CheckBoxPreference check = new CheckBoxPreference(this);
check.setTitle("Checkbox");
check.setSummary("Example of checkbox");
DialogPreference license = new MyDialogPreference(this, "License","This is the license for...bla bla");
/* Now we add the preferences to the preference screen */
PreferenceScreen preferenceScreen = this.getPreferenceManager()
.createPreferenceScreen(this);
addPreferenceCategory(preferenceScreen, "Preferences Tutorial",version, author, marketLink, check, license);
this.setPreferenceScreen(preferenceScreen);
}
private boolean addPreferenceCategory(PreferenceScreen preferenceScreen,
String titleCategory, Preference... preferences) {
boolean addPreference = false;
for (Preference preference : preferences) {
if (preference != null)
addPreference = true;
}
if (addPreference) {
PreferenceCategory preferenceCategory = new PreferenceCategory(this);
preferenceCategory.setTitle(titleCategory);
preferenceScreen.addPreference(preferenceCategory);
for (Preference preference : preferences) {
if (preference != null)
preferenceCategory.addPreference(preference);
}
return true;
} else
return false;
}
private Preference getPreference(String title, String summary, Intent intent) {
Preference pref = new Preference(this);
pref.setTitle(title);
pref.setSummary(summary);
if (intent != null)
pref.setIntent(intent);
return pref;
}
public class MyDialogPreference extends DialogPreference {
public MyDialogPreference(Context context, String title, String text) {
super(context, null);
this.setTitle(title);
this.setDialogMessage(text);
}
}
}