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

时间:2017-01-01 10:23:25

标签: java android

我有三个活动,每个活动都有一个按钮。 Act1与btn1,Act2与btn2,Act3与btn3。我有另一个Activity作为MainActivity,有三个imageViews:ImageView1,imageView2和imageView3,所有这些都是最初不可见的。我想要它,所以当我在act1中单击btn1时,MainActivity中的imageView1将可见,再次单击btn1时,imageView1将再次不可见。对于imageView2和imageView3也是如此。到目前为止我有这个代码:

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有三个imageViews:

        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);

和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);
    }


}

他们运作良好。但问题是当我点击btn1时,MainActivity中的所有imageViews都会发生变化(变得可见或不可见),或者当我点击btn3时,所有的imageView都会发生变化。我想btn1只是更改imageView1和btn2只是更改imageView2和btn3只是更改imageView3,而不是更改所有imageViews的其中一个按钮。我认为问题是我为所有人定义了一个关键偏好。但我不知道如何为每一个定义特殊键。我怎样才能做到这一点?请更改密码并重新编写。 TNX。

2 个答案:

答案 0 :(得分:2)

如果!

,则对所有3个变量使用1个变量

为每个活动/图像视图制作不同的变量

      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);

(也将每个活动更改为keyVisibility1,keyVisibility2和keyVisibility3)

答案 1 :(得分:0)

在单独的类名Constant中生成三个静态变量。并用false

初始化它们
public class Constant() {
    public static Boolean firstButton = false;
    public static Boolean secondButton = false;
    public static Boolean thirdButton = false;
}

现在,当您点击activity1的btn1时,请执行此操作

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

现在在你的其他活动中。在你的onCreateMethode中就是这样做

imageView1.setVisibility(Constant.firstButton ? View.Visible: View.Gone);
相关问题