如何在共享首选项

时间:2017-04-20 23:17:23

标签: android sharedpreferences imagebutton layoutparams

我在SharedPreferences中保存ImageButton时遇到问题。

基本上,我有一个特殊的REFRESH按钮:

     bbutton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {... }

当点击它时,它会在Horizo​​ntalScrollView的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();

1 个答案:

答案 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())