web-dev-qa-db-ja.com

PreferenceActivityから新しいアクティビティを起動する

こんにちは、友達。 PreferenceActivityがあり、XMLファイルから入力されています。 1つのアイテムを押すと、新しいアクティビティを開始する必要があります。どうやってするの? XMLファイルまたはJavaクラスで何を書けばよいですか?

34
QuickNick

を使用して設定を追加した後

addPreferencesFromResource(R.xml.preferences);

onClickを使用して設定する設定を見つけます

findPreference("foo_bar_pref");

のようにキャストして定義します

Preference fooBarPref = (Preference) findPreference("foo_bar_pref");

次に、簡単にonClickを使用して設定できます

fooBarPref.setOnPreferenceClickListener (new OnPreferenceClickListener()){...}

そのリスナー内で(インテントを使用して)新しいアクティビティを開始できます。

61
faradaj

Xmlプリファレンスを使用している場合、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>
74
ggenglish

Gradle Builders、ここを見てください!

ビルドツールとしてgradle over antを使用していて、applicationId内でAndroidを宣言した場合。

[build.gradle]:

Android {
    defaultConfig {
        ...
        applicationId "com.overriding.package.name"
    }
    ...
}

これにより、AndroidManifest.xmlAndroid:packageでアプリの一意の識別子として宣言した値が上書きされます。

[AndroidManifest.xml]

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.my.package">
    <activity Android:name=".settings.MyActivity"/>
</manifest>

<intent>では、両方のパッケージ名を考慮する必要があります。

<Preference
    Android:title="Some Title"
    Android:summary="Some Description">

    <intent 
        Android:targetPackage="com.overriding.package.name"
        Android:targetClass="com.my.package.settings.MyActivity/>
</Preference>
14

これは設定を動的に追加するための素晴らしいチュートリアルです...後で独自の方法でカスタマイズする必要があります。

XMlの場合:

<Preference  Android:key="key" Android:title="See Android Market"></Preference>

Javaクラス:

Preferences preferences=findPreference("key");
               preferences.setIntent(new Intent(Intent.ACTION_VIEW,Uri.parse("https://market.Android.com/")));

OR

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

}

12
Ramesh Akula

アクティビティを起動するビューにonClickListenerを登録する必要があります。次に、このメソッド内で、インテントを使用してアクティビティを呼び出すだけです。このようなもの:

Intent intent = new Intent(this, ActivityToLaunch.class);

// Start boardgame
startActivity(intent);
1
Luis Ollero