2016-08-01 171 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

這不是問題的答案。你只是建議他如何編寫更好的代碼。 –