【问题标题】:The code was not function if SharedPreferences put in there如果将 SharedPreferences 放在那里,则代码不起作用
【发布时间】:2015-08-13 08:21:09
【问题描述】:

大家好,我的代码有问题,如果我把 SharedPreferences 我的代码不起作用

我会用下面的代码来解释

这是menu.class

public class menu extends Activity {

    Button f1, f2;
    ImageView f2lock;    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.famouslevel);
        f1 =(Button)findViewById(R.id.f1);      

        f1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v){
                // TODO Auto-generated method stub
                Intent level1 = new Intent ();
                level1.setClassName ("com.example.game", "com.example.game.levelone");
                startActivityForResult (level1, 0);              
            }             
        });     
    }   

    public void onActivityResult (int requestCode, int resultCode, Intent level1){
        super.onActivityResult (requestCode, resultCode, level1); 
        f2=(Button)findViewById(R.id.f2);      
        f2lock=(ImageView)findViewById(R.id.f2lock);

        switch (resultCode) {
            case 2:  f2.setVisibility(View.VISIBLE);
                     f2lock.setVisibility(View.GONE);            
        }      

        f2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v){
                // TODO Auto-generated method stub
                Intent level2 = new Intent ();
                level2.setClassName ("com.example.game", "com.example.game.leveltwo");
                startActivityForResult (level2, 0);              
            }             
        });       
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.splashscreen, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

如果我使用此代码

        switch (resultCode) {
        case 2:  f2.setVisibility(View.VISIBLE);
                 f2lock.setVisibility(View.GONE);            
        }   

代码运行完美,menu.xml 中的 f2 按钮显示为 VISIBLE 和 f2lock GONE 但当然没有SharedPreferences 它不会保存。

因此,如果我更改代码并像这样输入SharedPreferences

switch (resultCode) {
    case 2:    
        SharedPreferences preferences = getSharedPreferences("preferences", MODE_PRIVATE);            
        SharedPreferences.Editor editor = preferences.edit(); 
        editor.putBoolean("f2", levelTwoUnlocked);
        editor.commit();

        if(levelTwoUnlocked){
            f2.setVisibility(View.VISIBLE);
            f2lock.setVisibility(View.GONE);            
        }
        else {
            f2.setVisibility(View.GONE);
            f2lock.setVisibility(View.VISIBLE);
        }      
}

menu.xml中的f2键不转VISIBLE,还是GONE。您的代码无法生成 f2 按钮 VISIBLE 和 f2lock GONE

谁能帮我处理这段代码?

更新

我又改了代码

switch (resultCode) {
        case 2:    
            SharedPreferences preferences = getSharedPreferences("preferences", MODE_PRIVATE); 
            //to make f2 VISIBLE and f2lock GONE
            boolean levelTwoUnlocked = preferences.getBoolean("f2", true);      
            SharedPreferences.Editor editor = preferences.edit(); 
            editor.putBoolean("f2", levelTwoUnlocked);
            editor.commit();

            if(levelTwoUnlocked){
                f2.setVisibility(View.VISIBLE);
                f2lock.setVisibility(View.GONE);            
            }
            else {
                f2.setVisibility(View.GONE);
                f2lock.setVisibility(View.VISIBLE);
            }      
    }

还是一样的问题,f2不会setVisibility(View.VISIBLE)

【问题讨论】:

    标签: java android boolean sharedpreferences


    【解决方案1】:

    实际上,我不太了解您要做什么,但错误是您从不切换布尔值levelTwoUnlocked。所以不要介意你在if 中输入多少次,路线总是一样的(我打赌levelTwoUnlocked=false 因为是默认的Java boolean 值):

    if(levelTwoUnlocked){
        f2.setVisibility(View.VISIBLE);
        f2lock.setVisibility(View.GONE);            
        levelTwoUnlocked = false;
    } else {
        f2.setVisibility(View.GONE);
        f2lock.setVisibility(View.VISIBLE);
        levelTwoUnlocked = true;
    }      
    

    【讨论】:

    • 我已经更新了我上面的代码,最好看看 Jordi
    • 你试过我的答案了吗?按钮显示和隐藏?现在是什么问题?
    猜你喜欢
    • 1970-01-01
    • 2017-06-02
    • 2020-03-13
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 2014-11-21
    相关资源
    最近更新 更多