【发布时间】:2023-03-25 10:10:02
【问题描述】:
我正在使用共享首选项创建切换按钮以添加到收藏夹功能,但是当我单击按钮以添加到收藏夹时它不起作用但是当我移回另一个活动并返回此活动时我的按钮未选中,当我再次点击时,它的说法已从收藏夹中删除,但它应该被标记为收藏,因为我已经将其标记为收藏
XML
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".BenefitDescriptionActivity">
<ToggleButton
android:id="@+id/favouritetogglebuttonID"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:textOff=""
android:textOn=""
app:layout_constraintBottom_toTopOf="@+id/benefitdescriptionscrollviewID"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/benefitimageviewID" />
</android.support.constraint.ConstraintLayout>
Java
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import android.widget.ToggleButton;
import static android.text.Html.FROM_HTML_MODE_COMPACT;
public class BenefitDescriptionActivity extends AppCompatActivity {
private ToggleButton favouriteToggleButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_benefit_description);
favouriteToggleButton = (ToggleButton)findViewById(R.id.favouritetogglebuttonID);
favouriteToggleButton.setBackgroundDrawable(ContextCompat.getDrawable(getApplicationContext(),R.drawable.ic_favorite_border_black_24dp));
favouriteToggleButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isFavourite = readstate();
if (isFavourite) { favouriteToggleButton.setBackgroundDrawable(ContextCompat.getDrawable(getApplicationContext(),R.drawable.ic_favorite_black_24dp));
Toast.makeText(BenefitDescriptionActivity.this,"Added to favorites",Toast.LENGTH_SHORT).show();
isFavourite = false;
savestate(isFavourite);
}
else {
favouriteToggleButton.setBackgroundDrawable(ContextCompat.getDrawable(getApplicationContext(),R.drawable.ic_favorite_border_black_24dp));
Toast.makeText(BenefitDescriptionActivity.this,"Removed from favorites",Toast.LENGTH_SHORT).show();
isFavourite = true;
savestate(isFavourite);
}
}
});
private void savestate(boolean isFavourite){
SharedPreferences aSharedPreferences = this.getSharedPreferences("Favourite", Context.MODE_PRIVATE);
SharedPreferences.Editor aSharedPreferencesEdit = aSharedPreferences.edit();
aSharedPreferencesEdit.putBoolean("State",isFavourite);
aSharedPreferencesEdit.apply();
}
private boolean readstate(){
SharedPreferences asharedPreferences = this.getSharedPreferences("Favourite",Context.MODE_PRIVATE);
return asharedPreferences.getBoolean("State",true);
}
}
【问题讨论】:
-
readstate() 的返回值是什么?当您返回切换活动时,它是否返回正确的值?
标签: java android sharedpreferences