2016-10-12 16 views
0

アプリに設定ページを追加する際に問題があります。設定ページをアプリに追加する

私は、SettingsActivity、SettingsFragment、actibity_settings.xmlレイアウト、およびpreferences.xmlファイルを作成しました。

私はactivity_mainビューにボタンを配置し、MainActivityにインテントを追加してSettingsActivityを呼び出しました。

ただし、ボタンを置いても何もしないようです。

SettingsActivity

public class SettingsFragment extends PreferenceFragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
    } 
} 

MainActivity

public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { 

    private SharedPreferences pref; 

    public static void start(Context context) { 
     Intent intent = new Intent(context, SettingsActivity.class); 
     context.startActivity(intent); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_settings); 
     pref = PreferenceManager.getDefaultSharedPreferences(this); 
     pref.registerOnSharedPreferenceChangeListener(this); 
    } 

    @Override 
    public void onDetachedFromWindow() { 
     pref.unregisterOnSharedPreferenceChangeListener(this); 
     super.onDetachedFromWindow(); 
    } 

    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
     // TODO handle any special logic on change of a preference if you want 
    } 
} 

SettingsFragment、メソッドの省略残り。

public class MainActivity extends Activity implements OnClickListener { 

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_activity); 
     ... 
} 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_activity); 

    ActionBar bar = getActionBar(); 
    bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(BAR_COLOUR))); 
    context = getApplicationContext(); 

    View createButton = findViewById(R.id.locate_button); 
    createButton.setOnClickListener(this); 
    latitudeTextView = (TextView) findViewById(R.id.latitude_textview); 
    latitudeTextView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.define_location, 0, 0, 0); 
    latitudeValueTextView = (TextView) findViewById(R.id.latitude_value_textview); 
    longitudeTextView = (TextView) findViewById(R.id.longitude_textview); 
    longitudeTextView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.define_location, 0, 0, 0); 
    longitudeValueTextView = (TextView) findViewById(R.id.longitude_value_textview); 
    accuracyTextView = (TextView) findViewById(R.id.accuracy_textview); 
    accuracyTextView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.info, 0, 0, 0); 
    accuracyValueTextView = (TextView) findViewById(R.id.accuracy_value_textview); 
    lastUpdateTextView = (TextView) findViewById(R.id.last_update_view); 
    lastUpdateValueTextView = (TextView) findViewById(R.id.last_update_date); 

    webView = (WebView) findViewById(R.id.map_view); 
    webView.setWebViewClient(new WebViewClient()); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.setVisibility(View.INVISIBLE); 

    isPermissionGiven(); 

} 

あるpreferences.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <PreferenceCategory 
     android:title="@string/pref_catOne" 
     android:key="pref_key_catOne" > 
     <CheckBoxPreference 
      android:key="mockCheckBox" 
      android:defaultValue="true" 
      android:title="@string/pref_mockCheckBoxOne" 
      android:summary="@string/pref_mockCheckBoxSummary" /> 
     <CheckBoxPreference 
      android:key="mockCheckBox" 
      android:defaultValue="true" 
      android:title="@string/pref_mockCheckBoxTwo" 
      android:summary="@string/pref_mockCheckBoxSummary" /> 
    </PreferenceCategory> 
    <PreferenceCategory 
     android:title="@string/pref_catTwo" 
     android:key="pref_key_catTwo" > 
    </PreferenceCategory> 
</PreferenceScreen> 

activity_settings.xml

<fragment 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    class="org.softshack.SettingsFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

main_activity.xml(ボタンのみ)

<Button 
     android:text="Button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/accuracy_textview" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:id="@+id/settingsButton" /> 
+0

これまでのところどうなりますか?あなたは私たちにいくつかの文脈を与えることができます最初に設定アクティビティが開始されていますか? –

+0

同じページにとどまり、設定作業を開始しません。 – Yoklan

+0

私の更新された答えは設定ページの完全な実例を参照してください。 –

答えて

0

を私はあなたのクリックのパターンのファンではないが、あなたはそれを維持したい場合だけ使用します。

セッティング活動SettingsActivity.javaを作成します。

View settingsButton = findViewById(R.id. settingsButton); 
settingsButton.setOnClickListener(this); 
+0

この課題のために私のグループの誰かが私たちの学習課題のためにその部分をしました。これをonClickメソッドで試してみましょう。 – Yoklan

+0

これはうまくいくようです、ありがとう!では、onClickメソッドがこれで済んだ方法は間違っていますか?それはどのように実装されることを意味しますか? – Yoklan

+0

通常、各要素ごとにクリックごとに個別に設定されます。しかし、[ButterKnife](https://jakewharton.github.io/butterknife/)の使用をお勧めします。 –

0

あなたSettingsActivityは、PreferenceActivityから拡張する必要があり、ない活動:

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

     // Load the preferences from an XML resource 
     addPreferencesFromResource(R.xml.preferences); 
    } 
    ... 
} 
+0

それはまだ動作しません。ボタンをクリックすると何もせず、エラーも発生しません。 – Yoklan

+0

あなたが見るためにもう少しコードを追加する必要があります – RustWebDev

0

は、ここで設定ページに必要なすべての部品の完全な例です。

活動activity_settings.xmlのレイアウトを作成します。

<fragment 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    class="com.yourorg.yourapp.package.to.SettingsFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

は、あなたのSettingsFragmentへのパスを反映するためにclassのattrを更新します。単にそれを削除し、入力を開始し、アンドロイドスタジオで自動的に完了する必要があります。 SettingsFragment.javaを作成

public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { 

    private SharedPreferences pref; 

    public static void start(Context context) { 
     Intent intent = new Intent(context, SettingsActivity.class); 
     context.startActivity(intent); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_settings); 
     pref = PreferenceManager.getDefaultSharedPreferences(this); 
     pref.registerOnSharedPreferenceChangeListener(this); 
    } 

    @Override 
    public void onDetachedFromWindow() { 
     pref.unregisterOnSharedPreferenceChangeListener(this); 
     super.onDetachedFromWindow(); 
    } 

    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
     // TODO handle any special logic on change of a preference if you want 
    } 
} 

public class SettingsFragment extends PreferenceFragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
    } 
} 
+0

それはまだ動作しません。ボタンをクリックすると何もせず、エラーも発生しません。 – Yoklan

+0

私はあなたのリビジョンでそれを試しましたが、ボタンをクリックしても何もしません。私は元の質問のコードを更新します – Yoklan

+0

'AndroidManifest.xml'でアクティビティを宣言しましたか? 'startActivity()'が呼び出されているところにブレークポイントを置くことができますか? –

関連する問題