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?
Ja, das stimmt. –