我在SharedPreferences中保存ImageButton时遇到问题。
基本上,我有一个特殊的REFRESH按钮:
bbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {... }
当点击它时,它会在HorizontalScrollView的LinearLayout中创建另一个ImageButton,背景为drawables文件夹中的“a”。新生成的ImageButton将拥有自己的onClick函数。但是,在创建它之前,该活动中没有ImageButton,它只会在点击特殊的REFRESH按钮后出现在“LinearLayoutScrollView”中,其中包含一些“if和else if”语句,这些语句将生成具有不同可绘制背景的ImageButtons。 / p>
我想要的是,在创建新的ImageButton(具有自己的drawables背景)后,它将保留在应用程序中,直到用户删除应用程序或ImageButton本身。但是,我想在重新启动应用程序后看到保存的ImageButton。
我现在要做的是如下所示,但它不起作用,所以我可能做错了。也许有人知道我需要改变什么?
最后我使用SharedPreferences代码来保存新创建的ImageButton,其背景为drawable“a”。之后如果跟随其他几个,如果它们与顶部的那个基本相同,只有不同的可选背景用于不同的选择,我从另一个活动的意图得到url ...
根据您的建议编辑(但仍然没有保存图片):
final SharedPreferences prefs = getSharedPreferences("MySavedHomeFile", MODE_PRIVATE);
final LinearLayout Row = (LinearLayout) findViewById(R.id.LinearLayoutScrollView);
bbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent a = getIntent();
Intent b = getIntent();
String url1 = a.getStringExtra("url1");
String url2 = b.getStringExtra("url2");
if (url1 == null && url2 == null && url3 == null) {
Toast.makeText(getApplication(), "No new clients added!", Toast.LENGTH_SHORT).show();
} else if (url1 != null) {
int backgroundRes = prefs.getInt("savedImageButton" , R.drawable.a);
final ArrayList<String> Keys = new ArrayList<String>();
for(int ii = 0; ii < 1; ii ++){
Keys.add("Keys is : " + String.valueOf(ii));
}
LinearLayout Row = (LinearLayout) findViewById(R.id.LinearLayoutScrollView);
int width = 240;
int height = 240;
final ImageButton[] my_button = new ImageButton[Keys.size()];
for (int bt = 0; bt < Keys.size(); bt ++) {
final int Index = bt;
my_button[Index] = new ImageButton(HomePageNews.this);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(width, height);
lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT, R.id.imageButton11);
my_button[Index].setLayoutParams(lp);
my_button[Index].setId(Index);
my_button[Index].setBackgroundResource(backgroundRes);
my_button[bt].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (my_button[Index].getId() == ((ImageButton) v).getId()) {
}
}
});
Row.addView(my_button[Index]);
}
SharedPreferences saveNewHome = getSharedPreferences("MySavedHomeFile", MODE_PRIVATE);
SharedPreferences.Editor editor = saveNewHome.edit();
editor.putInt("savedImageButton", R.drawable.a);
editor.apply();
}else if (url2 != null) {
int backgroundRes = prefs.getInt("savedImageButton" , R.drawable.b) ;
final ArrayList<String> Keys2 = new ArrayList<String>();
for(int ee = 0; ee < 1; ee ++){
Keys2.add("Keys is : " + String.valueOf(ee));
}
LinearLayout Row2 = (LinearLayout) findViewById(R.id.LinearLayoutScrollView);
int width = 240;
int height = 240;
final ImageButton[] my_button2 = new ImageButton[Keys2.size()];
for (int bt2 = 0; bt2 < Keys2.size(); bt2 ++){
final int Index2 = bt2;
my_button2[Index2] = new ImageButton(HomePageNews.this);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(width, height);
lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT, R.id.imageButton11);
my_button2[Index2].setLayoutParams(lp);
my_button2[Index2].setId(Index2);
my_button2[Index2].setBackgroundResource(backgroundRes);
my_button2[bt2].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (my_button2[Index2].getId() == ((ImageButton) v).getId()){
}
}
});
Row2.addView(my_button2[Index2]);
}
SharedPreferences prefs = getSharedPreferences("MySavedHomeFile", MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("savedImageButton", R.drawable.b);
editor.apply();
答案 0 :(得分:0)
不要存储整个图像。只需存储创建可绘制的资源
editor.putInt("savedImageButton", R.drawable.a);
然后,把它拿出来
// move this outside of the button setOnClickListener
final SharedPreferences prefs = getSharedPreferences("MySavedHomeFile", MODE_PRIVATE);
final LinearLayout Row = (LinearLayout) findViewById(R.id.LinearLayoutScrollView);
创建按钮时......
// Getting the drawable
int backgroundRes = prefs.getInt("savedImageButton" , R.drawable.a) ;
// setting the imagebutton
my_button[Index].setBackgroundResource(backgroundRes);
新生成的ImageButton将拥有自己的onClick函数。
有一些方法可以设置一个所有按钮共享的OnClickListener接口。您只需在每个按钮的事件中动态使用必要的数据
不太确定你在这里想做什么。
每次点击bbutton
,您都会创建一个空列表,空数组和全新按钮(嗯,因为Keys
中只有一个元素,所以只有一个按钮)
这也是真的。转换为ImageButton什么都不做。 if (my_button[Index].getId() == ((ImageButton) v).getId())