2017-01-25 5 views
0

Ich versuche, eine Präferenzen Aktivität zu schaffen, aber aus irgendeinem Grund, meine Schaltersteuerung verhält sich nicht die Art, wie es soll. Es verhindert, dass die gewünschten Items kollabieren + meine App stürzt ab, wenn ich zu SettingsActivity navigiere. Ich verstehe wirklich nicht, warum das passiert, wenn die Komponente eindeutig deklariert wurde. Unten ist mein Code (der Code für die Seiten 2 und 3 weggelassen wurden Unordnung in meiner Frage zu reduzieren):Artikel in verschiedenen Aktivitäten kollabiert nicht

activity_page1.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_page1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.apptacularapps.settingsapp.Page1Activity"> 

    <View 
     android:id="@+id/blue_square" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="20dp" 
     android:background="@drawable/shape_blue_square" /> 

    <View 
     android:id="@+id/blue_circle" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_centerHorizontal="true" 
     android:background="@drawable/shape_blue_circle" 
     android:layout_marginBottom="20dp" 
     android:layout_below="@id/blue_square"/> 

    <View 
     android:id="@+id/blue_rectangle" 
     android:layout_width="300dp" 
     android:layout_height="100dp" 
     android:layout_centerHorizontal="true" 
     android:background="@drawable/shape_blue_rectangle" 
     android:layout_below="@id/blue_circle"/> 

</RelativeLayout> 

Page1Activity.java

public class Page1Activity extends AppCompatActivity { 

    boolean squareState; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_page1); 
    } 

    @Override 
    public void onResume(){ 
     super.onResume(); 
     loadPreferences(); 
     displaySettings(); 
    } 

    public void loadPreferences(){ 
     SharedPreferences pref = getSharedPreferences("settings", AppCompatActivity.MODE_PRIVATE); 
     squareState = pref.getBoolean("square_state", true); 
    } 

    public void displaySettings() { 
     if (squareState) { 
      findViewById(R.id.blue_square).setVisibility(View.VISIBLE); 
     } else { 
      findViewById(R.id.blue_square).setVisibility(View.GONE); 
     } 
    } 
} 

activity_settings.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.packagename.settingsapp.SettingsActivity"> 

<android.support.v7.widget.SwitchCompat 
    android:id="@+id/square_switch" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:checked="true" 
    android:layout_margin="20dp" 
    android:text="Show squares" 
    style="@android:style/TextAppearance.Large" /> 

<android.support.v7.widget.SwitchCompat 
    android:id="@+id/circle_switch" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:checked="true" 
    android:layout_margin="20dp" 
    android:text="Show circles" 
    style="@android:style/TextAppearance.Large" 
    android:layout_below="@id/square_switch"/> 

<android.support.v7.widget.SwitchCompat 
    android:id="@+id/rectangle_switch" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:checked="true" 
    android:layout_margin="20dp" 
    android:text="Show rectangles" 
    style="@android:style/TextAppearance.Large" 
    android:layout_below="@id/circle_switch"/> 

</RelativeLayout> 

SettingsActivity.java

public class SettingsActivity extends AppCompatActivity { 

    boolean squareState; 
    SwitchCompat squareSwitch; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_settings); 
    } 

    @Override 
    public void onResume(){ 
     super.onResume(); 
     loadPreferences(); 
     displaySettings(); 
    } 

    public void loadPreferences(){ 
     SharedPreferences pref = getSharedPreferences("settings", AppCompatActivity.MODE_PRIVATE); 
     squareState = pref.getBoolean("square_state", true); 
    } 

    public void displaySettings(){ 
     squareSwitch.setChecked(squareState); 
    } 

    @Override 
    public void onPause(){ 
     super.onPause(); 
     savePreferences(); 
    } 

    private void savePreferences(){ 
     SharedPreferences pref = getSharedPreferences("settings", AppCompatActivity.MODE_PRIVATE); 
     SharedPreferences.Editor editor = pref.edit(); 
     editor.putBoolean("square_state", squareState); 
     editor.apply(); 
    } 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

     int id = buttonView.getId(); 

     switch(id){ 
      case R.id.square_switch: 
       squareState = isChecked; 
       break; 
     } 
    } 
} 

Aktuelles Ergebnis enter image description here

Erwartetes Ergebnis enter image description here

Antwort

1

Sie sind nichtBefestigungfür eine beliebige UI-Komponente. Aktualisieren Sie Ihre SettingsActivity.java auf die folgenden:

public class SettingsActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener { 

boolean squareState; 
SwitchCompat squareSwitch; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_settings); 

     squareSwitch = (SwitchCompat)findViewById(R.id.square_switch); //add this line 
     squareSwitch.setOnCheckedChangeListener(this); //Also add this 
} 

@Override 
public void onResume(){ 
    super.onResume(); 
    loadPreferences(); 
    displaySettings(); 
} 

public void loadPreferences(){ 
    SharedPreferences pref = getSharedPreferences("settings", AppCompatActivity.MODE_PRIVATE); 
    squareState = pref.getBoolean("square_state", true); 
} 

public void displaySettings(){ 
    squareSwitch.setChecked(squareState); 
} 

@Override 
public void onPause(){ 
    super.onPause(); 
    savePreferences(); 
} 

private void savePreferences(){ 
    SharedPreferences pref = getSharedPreferences("settings", AppCompatActivity.MODE_PRIVATE); 
    SharedPreferences.Editor editor = pref.edit(); 
    editor.putBoolean("square_state", squareState); 
    editor.apply(); 
} 

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

    int id = buttonView.getId(); 

    switch(id){ 
     case R.id.square_switch: 
      squareState = isChecked; 
      break; 
    } 
} 

Auch brauchen Sie nicht CompoundButton.OnCheckedChangeListener zu implementieren und zu überschreiben onCheckedChanged in Page1Activity möchten Sie vielleicht diejenigen von dort entfernen.

+0

Sie es werfen müssen, drücken Sie Alt + Enter und es wird einen Vorschlag zu werfen es zeigen. aktualisierte auch die Antwort. – Saurabh

+0

aktualisierte Antwort. – Saurabh

+0

Wissen Sie, wie Sie dieses andere Problem lösen können? Ich habe versucht, dies für Monate zu lösen (aufgrund der fehlenden Tutorials): [Link zu anderen Frage] (http://stackoverflow.com/questions/41961805/fragment-item-wont-collapse) – MacaronLover

Verwandte Themen