android:如何使用arraylist值在我的textview上设置可见性

时间:2015-05-09 11:22:06

标签: android arraylist

我使用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

1 个答案:

答案 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 。所以,请记住在开关块中,如果它是真的而不是整个事件,则只会执行一个案例。