简体   繁体   English

定义keyPreference以使可见和不可见的imageView

[英]define keyPreference for make visible and invisible imageView

I have three Activities with one button in each of them. 我有三个活动,每个活动都有一个按钮。 Act1 with btn1, Act2 with btn2, and Act3 with btn3. 带有btn1的Act1,带有btn2的Act2和带有btn3的Act3。 I have another Activity as MainActivity with three imageViews: ImageView1, imageView2 and imageView3, all of which are initially invisible. 我还有另一个Activity作为MainActivity,它具有三个imageViews:ImageView1,imageView2和imageView3,它们最初都是不可见的。 I want it so when I click on btn1 in act1, imageView1 in MainActivity will be visible and when click on btn1 again, imageView1 will be invisible again. 我想要它,所以当我在act1中单击btn1时,MainActivity中的imageView1将可见,而再次单击btn1时,imageView1将再次不可见。 And similarly for imageView2 and imageView3. 同样适用于imageView2和imageView3。 I have this code so far: 到目前为止,我有以下代码:

Activity1

public class Activity1 extends AppCompatActivity{

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

Button btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String visibilityStr = PublicSharedPreferences.getDefaults("keyVisibility1", getApplicationContext());

        if (visibilityStr != null) {
            if (visibilityStr.equals("0")) {
                Toast.makeText(act1.this, "it visibled", Toast.LENGTH_SHORT).show();
                visibilityStr = "1";
btn1.setImageResource(R.mipmap.img1);

            } else {
                visibilityStr = "0";
                Toast.makeText(act1.this, "it invisibled", Toast.LENGTH_SHORT).show();
btn1.setImageResource(R.mipmap.img2);

            }
        } else {
            visibilityStr = "1";
            Toast.makeText(act1.this, "it visibled", Toast.LENGTH_SHORT).show();
btn1.setImageResource(R.mipmap.img1);

        }

        PublicSharedPreferences.setDefaults("keyVisibility1", visibilityStr, getApplicationContext());

    }
});
}





Activity2

public class Activity2 extends AppCompatActivity{

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


Button btn1 = (Button) findViewById(R.id.btn2);
btn1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String visibilityStr = PublicSharedPreferences.getDefaults("keyVisibility2", getApplicationContext());

        if (visibilityStr != null) {
            if (visibilityStr.equals("0")) {
                Toast.makeText(act2.this, "it visibled", Toast.LENGTH_SHORT).show();
btn2.setImageResource(R.mipmap.img1);

                visibilityStr = "1";
            } else {
                visibilityStr = "0";
                Toast.makeText(act2.this, "it invisibled", Toast.LENGTH_SHORT).show();
btn2.setImageResource(R.mipmap.img2);

            }
        } else {
            visibilityStr = "1";
            Toast.makeText(act2.this, "it visibled", Toast.LENGTH_SHORT).show();
btn2.setImageResource(R.mipmap.img1);

        }

        PublicSharedPreferences.setDefaults("keyVisibility2", visibilityStr, getApplicationContext());

    }
});
}



Activity3

public class Activity3 extends AppCompatActivity{

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

Button btn1 = (Button) findViewById(R.id.btn3);
btn1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String visibilityStr = PublicSharedPreferences.getDefaults("keyVisibility3", getApplicationContext());

        if (visibilityStr != null) {
            if (visibilityStr.equals("0")) {
                Toast.makeText(act3.this, "it visibled", Toast.LENGTH_SHORT).show();
Btn3.setImageResource(R.mipmap.img1);

                visibilityStr = "1";
            } else {
                visibilityStr = "0";
                Toast.makeText(act3.this, "it invisibled", Toast.LENGTH_SHORT).show();
btn3.setImageResource(R.mipmap.img2);

            }
        } else {
            visibilityStr = "1";
            Toast.makeText(act3.this, "it visibled", Toast.LENGTH_SHORT).show();
btn3.setImageResource(R.mipmap.img1);

        }

        PublicSharedPreferences.setDefaults("keyVisibility3", visibilityStr, getApplicationContext());
    }
});
}

MainActivity with three imageViews: 具有三个imageViews的MainActivity:

        ImageView imgView1 = (ImageView) findViewById(R.id.imgView1);
String visibilityStr= PublicSharedPreferences.getDefaults("keyVisibility1", getApplicationContext());

if (visibilityStr.equals("0"))
    imgView1.setVisibility(View.INVISIBLE);
else
    imgView1.setVisibility(View.VISIBLE);


ImageView imgView2 = (ImageView) findViewById(R.id.imgView2);
String visibilityStr= PublicSharedPreferences.getDefaults("keyVisibility2", getApplicationContext());

if (visibilityStr.equals("0"))
    imgView2.setVisibility(View.INVISIBLE);
else
    imgView2.setVisibility(View.VISIBLE);



ImageView imgView3 = (ImageView) findViewById(R.id.imgView3);
String visibilityStr= PublicSharedPreferences.getDefaults("keyVisibility3", getApplicationContext());

if (visibilityStr.equals("0"))
    imgView3.setVisibility(View.INVISIBLE);
else
    imgView3.setVisibility(View.VISIBLE);

and SharedPreferences class: 和SharedPreferences类:

 public class PublicSharedPreferences {



    public static void setDefaults(String key, String value, Context context) {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString(key, value);
        editor.commit();
    }

    public static String getDefaults(String key, Context context) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        return preferences.getString(key, null);
    }


}

They work well. 他们运作良好。 But the problem is that when I click on btn1, all imageViews in MainActivity change (become visible or invisible) or when I click on btn3, all imageViews change. 但是问题是,当我单击btn1时,MainActivity中的所有imageViews都会更改(变为可见或不可见),或者当我单击btn3时,所有imageViews都会更改。 I want btn1 just changes imageView1 and btn2 just changes imageView2 and btn3 just changes imageView3, instead of one of the buttons changing all of the imageViews. 我希望btn1仅更改imageView1,而btn2仅更改imageView2,而btn3仅更改imageView3,而不是更改所有imageViews的按钮之一。 i think the problem is that i defined just one key Preference for all of them. 我认为问题是我为所有这些对象仅定义了一个关键的首选项。 but i dont know how i can define special key for each one. 但是我不知道如何为每个定义特殊键。 how can i do that? 我怎样才能做到这一点? please change the codes and write them again. 请更改代码,然后再次写入。 tnx. tnx。

You use 1 variable for all the 3 if! 如果所有3个条件都使用1个变量!

make different variable for each activity / imageview 为每个活动/图像视图制作不同的变量

  ImageView imgView1 = (ImageView) findViewById(R.id.imgView1); //keyVisibility1 String visibilityStr= PublicSharedPreferences.getDefaults("keyVisibility1", getApplicationContext()); if (visibilityStr.equals("0")) imgView1.setVisibility(View.INVISIBLE); else imgView1.setVisibility(View.VISIBLE); ImageView imgView2 = (ImageView) findViewById(R.id.imgView2); //keyVisibility2 visibilityStr= PublicSharedPreferences.getDefaults("keyVisibility2", getApplicationContext()); if (visibilityStr.equals("0")) imgView2.setVisibility(View.INVISIBLE); else imgView2.setVisibility(View.VISIBLE); ImageView imgView3 = (ImageView) findViewById(R.id.imgView3); //keyVisibility3 visibilityStr= PublicSharedPreferences.getDefaults("keyVisibility3", getApplicationContext()); if (visibilityStr.equals("0")) imgView3.setVisibility(View.INVISIBLE); else imgView3.setVisibility(View.VISIBLE); 

(also change in each activity to keyVisibility1, keyVisibility2 and keyVisibility3) (还将每个活动更改为keyVisibility1,keyVisibility2和keyVisibility3)

make three static variable in separate class name Constant. 在单独的类名Constant中创建三个静态变量。 and initialize them with false 然后用false初始化它们

public class Constant() {
    public static Boolean firstButton = false;
    public static Boolean secondButton = false;
    public static Boolean thirdButton = false;
}

now when you click on btn1, of your activity1, do this 现在,当您单击activity1的btn1时,执行此操作

btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Constant.firstButton = !Constant.firstButton;
                // start new Activity
            }
        });

now in your other activity. 现在正在您的其他活动中。 in your onCreateMethode just do that 在您的onCreateMethode中

imageView1.setVisibility(Constant.firstButton ? View.Visible: View.Gone);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM