2016-12-30 80 views
0

我有三个活动,每个活动都有一个按钮。 ACT1BTN1ACT2BTN2ACT3btn3。我有另一个活动作为MainActivity与三个imageViews:ImageView1,imageView2imageView3,所有这些都最初是不可见的。我想它,所以当我在ACT1imageView1在MainActivity点击BTN1将是可见的,当再次点击BTN1,imageView1将是无形的一次。同样对于imageView2imageView3。 我到目前为止这样的代码:通过按钮进行可见和不可见的图像查看

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("keyVisibility", 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("keyVisibility", 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("keyVisibility", 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("keyVisibility", 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("keyVisibility", 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("keyVisibility", visibilityStr, getApplicationContext()); 
    } 
}); 
} 

MainActivity三个imageViews:

ImageView imgView1 = (ImageView) findViewById(R.id.imgView1); 
String visibilityStr= PublicSharedPreferences.getDefaults("keyVisibility", 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("keyVisibility", 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("keyVisibility", getApplicationContext()); 

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

他们工作得很好。但问题是,当我单击btn1时,MainActivity中的所有imageView都会发生变化(变为可见或不可见),或者当我单击btn3时,所有imageView都会更改。我想这么BTN1只是改变imageView1BTN2只是改变imageView2btn3只是改变imageView3,而不是按钮改变所有imageViews之一。我怎样才能做到这一点?哪部分代码错了?

回答

1

的问题是,你只需要重点开放偏好所有keyVisibility所以当你点击到1个或0基地您的任何按钮的这一关键变化对你的代码

这里

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

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


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

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



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

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

和ofcoure您应该更改您的act1,act2和act3上的keyVisibility

+0

雅。那就是问题所在。现在我如何定义各种按键并在btns和图像代码中使用主题?你能帮我吗? – Nirvana

+0

您可以为每个图像视图定义唯一的密钥。例如act1上的image1和btn1将为keyVisibility1,而对于act2上的image2和btn2将为keyVisibility2 –

+0

你,你说得对。但问题是在这里,当我做一个按钮的唯一键,imageViews剂量接受它,我不知道为什么:(你能写出你的电子邮件和生病发送给你的项目。如果可能为你更改代码?我会很感激。 – Nirvana

0

首先,请多关注一下Android SharedPreferences(如何正确保存/获取sharepreference值你的本地存储)。

当你完成你的研究后,这里有一些提示给你。希望你能够自己实现这一点。

保存价值 - 保存您的布尔值,当你点击按钮

Context mContext = getApplicationContext(); 
SharedPreferences mPrefs = mContext.getSharedPreferences("MySharedPrefs", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = mPrefs.edit(); 
editor.putBoolean("IsImageViewVisible", true); 
// use different keys for different imageviews; 
//ex: for ImageView1, use IsImageView_1_Visible; for ImageView2, use IsImageView_2_Visible etc 
editor.commit(); 

获取值在MainActivity

Context mContext = getApplicationContext(); 
SharedPreferences mPrefs = mContext.getSharedPreferences("MySharedPrefs", Context.MODE_PRIVATE); 
Boolean isImageViewVisible = mPrefs.getBoolean("IsImageViewVisible", false); // here,false is default value 

然后,检查在MainActivity所有的ImageView 知名度

if(isImageViewVisible){ 
    // image is visible 
} else{ 
    // image is invisible 
} 
0

这是很容易的,你可以使用这个方法

1一个:共享偏好:在您的活动(ACT1,ACT2,ACT3)

写这个代码

onClick事件:

// on Act1 
final SharedPreferences sharedPreferences=getSharedPreferences("mainconf",MODE_PRIVATE); 

    buttonOnAct1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // check if isVisable and change value 
      if (sharedPreferences.getBoolean("isImg1Visable",true)){ 
       sharedPreferences.edit().putBoolean("isImg1Visable",false).apply(); 
      }else { 
       // show it again 
       sharedPreferences.edit().putBoolean("isImg1Visable",true).apply(); 
      } 
     } 
    }); 

// on Act2 
final SharedPreferences sharedPreferences=getSharedPreferences("mainconf",MODE_PRIVATE); 

    buttonOnAct2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // check if isVisable and change value 
      if (sharedPreferences.getBoolean("isImg2Visable",true)){ 
       sharedPreferences.edit().putBoolean("isImg2Visable",false).apply(); 
      }else { 
       // show it again 
       sharedPreferences.edit().putBoolean("isImg2Visable",true).apply(); 
      } 
     } 
    }); 

// on Act3 
final SharedPreferences sharedPreferences=getSharedPreferences("mainconf",MODE_PRIVATE); 

    buttonOnAct3.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // check if isVisable and change value 
      if (sharedPreferences.getBoolean("isImg3Visable",true)){ 
       sharedPreferences.edit().putBoolean("isImg3Visable",false).apply(); 
      }else { 
       // show it again 
       sharedPreferences.edit().putBoolean("isImg3Visable",true).apply(); 
      } 
     } 
    }); 

和代码的MainActivity的:

public class MainActivity extends AppCompatActivity { 
private ImageView imageView1; 
private ImageView imageView2; 
private ImageView imageView3; 
private SharedPreferences sharedPreferences; 
@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    imageView1=(ImageView)findViewById(R.id.img1); 
    imageView2=(ImageView)findViewById(R.id.img2); 
    imageView3=(ImageView)findViewById(R.id.img3); 
    sharedPreferences=getSharedPreferences("mainconf",MODE_PRIVATE); 
} 


// important PART OF CODE 
@Override 
protected void onResume() { 
    super.onResume(); 
    if (sharedPreferences.getBoolean("isImg1Visable",true)){ 
     imageView1.setVisibility(View.VISIBLE); 
    }else { 
     imageView1.setVisibility(View.GONE); 
    } 
    if (sharedPreferences.getBoolean("isImg2Visable",true)){ 
     imageView2.setVisibility(View.VISIBLE); 
    }else { 
     imageView2.setVisibility(View.GONE); 
    } 
    if (sharedPreferences.getBoolean("isImg3Visable",true)){ 
     imageView3.setVisibility(View.VISIBLE); 
    }else { 
     imageView3.setVisibility(View.GONE); 
    } 
} 

}

2:公共静态变量:

写你的变量作为静态 例如:

// in Your MainActivty under class 
public static ImageView imageView1; 
public static ImageView imageView2; 
public static ImageView imageView3; 


// in your Act1 Act2 Act3 

// for hiding from mainactivity 
MainActivity.imageView1.setVisibility(View.GONE); // or View.INVISIBLE 
// for showing on main activity 
MainActivity.imageView1.setVisibility(View.VISIBLE); 
+0

it dosent work。应用程序崩溃。为什么你单独编写代码的最后一部分?请在活动中编写主题。谢谢。 – Nirvana

+0

@Nirvana方法2仅在MainActivity不工作时才起作用。或破坏 请为我评论完整的错误 – smaznet