【问题标题】:define keyPreference for make visible and invisible imageView定义 keyPreference 以使 imageView 可见和不可见
【发布时间】:2017-01-01 20:35:23
【问题描述】:

我有三个活动,每个活动都有一个按钮。 Act1 与 btn1,Act2 与 btn2,Act3 与 btn3。我有另一个作为 MainActivity 的 Activity,带有三个 imageView: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());
    }
});
}

带有三个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);

和 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 时,所有 imageViews 都会发生变化。我希望 btn1 仅更改 imageView1,btn2 仅更改 imageView2,btn3 仅更改 imageView3,而不是其中一个按钮更改所有 imageView。我认为问题在于我只为所有这些定义了一个关键的首选项。但我不知道如何为每个定义特殊键。我怎样才能做到这一点?请更改代码并重新编写它们。 tnx。

【问题讨论】:

  • 您需要永久保存图像设置还是仅在应用程序运行时保存。在情况 1 中,只需使用 3 个不同的键来共享首选项。在案例 2 中,创建一个 Utility 类并将数据保存在 3 个静态变量中。

标签: java android


【解决方案1】:

您对所有 3 个 if 使用 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)

【讨论】:

  • 是的。你说得对。但是当我为按钮编写这个键时,它不起作用。为什么?
  • 编辑上面的代码并在你这样做后在这里评论。我会看看是什么问题
  • 尝试为每个首选项添加不同的变量名(字符串 visibilityStr)
  • 字符串可见性Str1= PublicSharedPreferences.getDefaults("keyVisibility1", getApplicationContext()); String visibilityStr2= PublicSharedPreferences.getDefaults("keyVisibility1", getApplicationContext());
【解决方案2】:

在单独的类名中创建三个静态变量常量。并用 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);

【讨论】:

    猜你喜欢
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    相关资源
    最近更新 更多