2016-08-01 4 views
1

以下のアクティビティがあります。私がアプリを実行するときは、一度だけ動作し、初めてまたはretrieveBTNを押すと、Textviewに変更がなく、store()retrieve()の機能についてのログは表示されません。ボタンOnClickListenerは1回だけ動作します。

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

なぜ 'setContentView(R.layout.activity_main);を' store() 'で使用していますか? –

答えて

3

問題は、私は以下のように使用するクリックリスナーを示唆してあなたがのonCreate()メソッド内のクリックのリスナーを追加することをされた私の視点から、()メソッド

+0

lolありがとう私はそれがどこから来たのかわからないのは、Intellij(アンドロイドスタジオ)のラインを削除するCTRL + Xだからだと思う。-_- – MaMadLord

2

ストアから

setContentView(R.layout.activity_main); 

削除コード、

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; 

     } 
    } 
} 

このコードでは、私は2行だけを追加し、1つは1つの方法を実装します

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

これは質問の答えではない。あなたはちょうど良いコードを書く方法を彼に提案しました。 –

関連する問題