2016-12-30 76 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