2016-08-01 209 views
1

我有以下活动。当我运行应用程序它只能工作一次,当我按storeBTNretrieveBTN第一次后,我看到Textview没有变化,没有关于运行store()retrieve()功能的日志。按钮OnClickListener只能运行一次android

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button storeBTN = (Button) findViewById(R.id.button); 
    storeBTN.setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      EditText et = (EditText) findViewById(R.id.editText); 
      int i = Integer.parseInt(et.getText().toString()); 
      store(i); 
     } 
    }); 
    Button retrieveBTN = (Button) findViewById(R.id.button2); 
    retrieveBTN.setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      retrieve(); 
     } 
    }); 

} 
public void store(int newHighScore){ 
    Log.d("Meeeeee", "store: "+newHighScore); 
    setContentView(R.layout.activity_main); 
    SharedPreferences sharedPref = this.getPreferences(this.MODE_APPEND); 
    SharedPreferences.Editor editor = sharedPref.edit(); 
    editor.putInt(getString(R.string.saved_high_score), newHighScore); 
    boolean b = editor.commit(); 
    Log.d("Meeee", "store: commited? "+b); 
    retrieve(); 
    return; 
} 
public void retrieve(){ 
    SharedPreferences sharedPref = this.getPreferences(this.MODE_APPEND); 
    int defaultValue = getResources().getInteger(R.integer.saved_high_score_default); 
    long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue); 
    Log.d("meeee", "retrieve: "+highScore+" in mode: "+this.MODE_APPEND); 
    TextView scoreTV = (TextView) findViewById(R.id.textView); 
    scoreTV.setText(highScore+""); 
    return; 
} 

} 
+3

为什么在store()中使用'setContentView(R.layout.activity_main);''? –

回答

3

删除

setContentView(R.layout.activity_main); 

从商店()方法

+0

哈哈谢谢我不知道从哪里来的,我认为这是因为CTRL + X在Intellij(android studio)删除行-_- – MaMadLord

2

从我的角度来看,问题是,你在onCreate()方法添加点击听者,我建议使用点击监听,像下面代码,

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 

/** 
* Created by Kintan Patel on 01-Aug-16. 
*/ 
public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button storeBTN = (Button) findViewById(R.id.button1); 
     storeBTN.setOnClickListener(this); 

     Button retrieveBTN = (Button) findViewById(R.id.button2); 
     storeBTN.setOnClickListener(this); 

    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.R.id.button1: 
      // storeBTN button click 
      break; 
      case R.id.R.id.button2: 
      //retrieveBTN click 
      break; 

     } 
    } 
} 

在这段代码中我只添加两行和一个实现一个方法,

implements View.OnClickListener 
    storeBTN.setOnClickListener(this); 
    storeBTN.setOnClickListener(this); 

后实现方法机器人工作室给错误覆盖的方法,就这么简单的替换点击方法,

@Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.R.id.button1: 
      // storeBTN button click 
      break; 
      case R.id.R.id.button2: 
      //retrieveBTN click 
      break; 

     } 
    } 

因此,在功能,你有更多的按钮在单页你的代码是干净的,易于理解。

如果您有任何疑问,请随时询问。

+1

这不是问题的答案。你只是建议他如何编写更好的代码。 –