我使用arraylist来显示/隐藏3个textview的可见性,当我检查数组列表的变化可见性时,它同时只工作一个文本视图,意味着如果3个textview的条件为真,那么3个textview必须是可见的,但是它只显示一个文本视图,我怎么能得到它?谢谢你的帮助。
我的代码:
public Test (string value)
我也将此代码添加到我的鳕鱼中,但它也不起作用
public class Favorites_page extends Activity implements OnClickListener {
String on="on",off="off";
static TextView tv_fav1,tv_fav2,tv_fav3,tv_fav4,tv_fav5,tv_fav6,tv_fav7,tv_favoritetittle;
ArrayList<String> list = new ArrayList<String>(3);
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.favorites);
boolean check = list.isEmpty();
if(check){
list.add(0,off);list.add(1,off);list.add(2,off);
save();
}
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
int score = pref.getInt("score", 0);
//
tv_fav1= (TextView) findViewById(R.id.tv_fav1);
tv_fav2= (TextView) findViewById(R.id.tv_fav2);
tv_fav3= (TextView) findViewById(R.id.tv_fav3);
tv_fav4= (TextView) findViewById(R.id.tv_fav4);
tv_fav5= (TextView) findViewById(R.id.tv_fav5);
tv_fav6= (TextView) findViewById(R.id.tv_fav6);
tv_fav7= (TextView) findViewById(R.id.tv_fav7);
tv_favoritetittle=(TextView) findViewById(R.id.tv_favoritetittle);
tv_fav1.setOnClickListener(this);
tv_fav2.setOnClickListener(this);
tv_fav3.setOnClickListener(this);
tv_fav4.setOnClickListener(this);
tv_fav5.setOnClickListener(this);
tv_fav6.setOnClickListener(this);
tv_fav7.setOnClickListener(this);
switch (score) {
case 99:
if(score == 99){
tv_favoritetittle.setText("Nothing");
}
break;
case 100:
if(score == 100){
list.set(0,on);
save();
}
break;
case 101:
if(score == 101){
list.set(1,on);
save();
}
break;
case 102:
if(score == 102){
list.set(2,on);
save();
}
break;
default:
break;
}
//// the problem is here... with this command only textview is visible
if (list.get(0)==on) {
tv_fav7.setVisibility(View.VISIBLE);
}else {
tv_fav7.setVisibility(View.GONE);
}
if (list.get(1)==on) {
tv_fav6.setVisibility(View.VISIBLE);
}else {
tv_fav6.setVisibility(View.GONE);
}
if (list.get(2)==on) {
tv_fav5.setVisibility(View.VISIBLE);
}else {
tv_fav5.setVisibility(View.GONE);
}
} // marbot be Content
public void save()
{
Bundle value= new Bundle();
value.putStringArrayList("temp1", list);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
} // marbot be Activity
答案 0 :(得分:0)
我相信你的问题是,为什么只有一个TextView
是可见的,为什么不是其他人?
这是因为您只从sharedPreferences
获得了一个值。将其保存在score
变量中,当它转到switch()
时,如果为真,则仅转换为一种情况。
假设您从score
获得sharedPrefences
100,
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
int score = pref.getInt("score", 0); // now score value is 100
然后转到switch()
块并仅在此部分执行操作
case 100:
if(score == 100){
list.set(0,on);
save();
}
所以,当它来检查这个条件时,
if (list.get(0)==on) {
tv_fav7.setVisibility(View.VISIBLE);
}
这会返回true&amp; tvfav7的可见性将是可见的。
但是,当条件阻止时,它会转到下一个,
if (list.get(1)==on) {
tv_fav6.setVisibility(View.VISIBLE);
}else {
tv_fav6.setVisibility(View.GONE);
}
这会失败,因为在switch
阻止中,它不会转到下面的情况,将第二个位置和第三个位置设置为on
。
case 101:
if(score == 101){
list.set(1,on);
save();
}
break;
case 102:
if(score == 102){
list.set(2,on);
save();
}
break;
因为分数不是101或102. 100 。所以,请记住在开关块中,如果它是真的而不是整个事件,则只会执行一个案例。