2016-04-10 5 views
-2

Ich bin mir ziemlich sicher, dass es eine einfache Antwort dafür gibt ... Es tut mir leid, wenn das vorher gefragt wurde, aber sie sagen nur "definiere es als global".Endgültig, aber nicht global in Android Studio?

Hier ist meine MainActivity.java

package ideaman924.study07; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.FrameLayout; 

public class MainActivity extends AppCompatActivity { 



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

     int total = 0;       //ERROR HERE AS WELL!! 
     FrameLayout layout1 = (FrameLayout) findViewById(R.id.layout1); //ERROR HERE!! 
     EditText edittext1 = (EditText) findViewById(R.id.edittext1); //AND HERE!! 
     layout1.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       total++; 
       edittext1.setText("Touched times: " + String.valueOf(total)); 
       return true; 
      } 
     }); 
    } 

    public void closeApp(View v) { 
     finish(); 
     System.exit(0); 
    } 
} 

Sehr einfach peasy. Jedes Mal, wenn jemand das FrameLayout (oder das FrameLayout) berührt, bekomme ich die Berührung, addiere 1 zu total und zeige es dem Benutzer an.

Wenn ich jedoch versuche zu erstellen, wird ein Fehler ausgegeben, der besagt, dass auf die Variable innerhalb der lokalen Funktion zugegriffen wird und sie als final deklariert werden muss. Also habe ich versucht, die Linien hinter dem onCreate bewegen:

package ideaman924.study07; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.FrameLayout; 

public class MainActivity extends AppCompatActivity { 
    int total = 0; 
    FrameLayout layout1 = (FrameLayout) findViewById(R.id.layout1); 
    EditText edittext1 = (EditText) findViewById(R.id.edittext1); 

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

     layout1.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       total++; 
       edittext1.setText("터치한 횟수: " + String.valueOf(total)); 
       return true; 
      } 
     }); 
    } 

    public void closeApp(View v) { 
     finish(); 
     System.exit(0); 
    } 
} 

jedoch zur Laufzeit, es stürzt ab. Vermutlich passiert das, weil ich findViewById vor setContentView (R.layout.activity_main) aufgerufen habe;

Irgendwelche Ideen?

+0

Ja, das stimmt. –

Antwort

2

Benutzer Code unten

public class MainActivity extends AppCompatActivity { 
    int total = 0; 
    FrameLayout layout1;// = (FrameLayout) findViewById(R.id.layout1); 
    /** 
    * edittext1 is used under onTouch, so it must be final variable or class level variable. 
    */ 
    EditText edittext1;// = (EditText) findViewById(R.id.edittext1); 

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

     /** 
     * findViewById() method must be called after setContentView() method 
     */ 
     layout1 = (FrameLayout) findViewById(R.id.layout1); 
     edittext1 = (EditText) findViewById(R.id.edittext1); 

     layout1.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       total++; 
       edittext1.setText("터치한 횟수: " + String.valueOf(total)); 
       return true; 
      } 
     }); 
    } 

    public void closeApp(View v) { 
     finish(); 
     System.exit(0); 
    } 
} 
2

Verschieben Sie diese Zeilen nach setContentView (R.layout.activity_main);

FrameLayout layout1 = (FrameLayout) findViewById(R.id.layout1); 
EditText edittext1 = (EditText) findViewById(R.id.edittext1); 
+0

Sorry, aber dann bekomme ich den Fehler beim Aufruf von total ++ und edittext1, setText(); – ideaman924

+0

Welcher Fehler? Post logcat –

+0

Warten Sie einen Moment, ich lade Bild hoch .. Hier ist es. http://imgur.com/um6VNdy – ideaman924

Verwandte Themen