deka
Dauergast
- 351
Hallo zusammen,
es geht um eine Warnung in Android Studio, die mich etwas verwirrt.
In meiner Activity erzeuge ich sehr viele TextViews in der onCreate. Alle TextViews habe ich als private Klassenvariablen deklariert. Nun warnt mich Android Studio, dass ich anstatt der Klassenvariablen lokale Variablen verwenden soll.
Das Problem ist aber, dass ich die TextViews nicht nur in der onCreate verwende, sondern in einer weiteren Methode. Das hieße ja, wenn ich alle TextViews als lokale Variablen in der onCreate erzeuge, müsste ich quasi meine zweite Methode mit all den TextViews als Argument aufrufen. Die Lösung finde ich auch nicht so schön.
Verstehe ich hier etwas falsch?
es geht um eine Warnung in Android Studio, die mich etwas verwirrt.
In meiner Activity erzeuge ich sehr viele TextViews in der onCreate. Alle TextViews habe ich als private Klassenvariablen deklariert. Nun warnt mich Android Studio, dass ich anstatt der Klassenvariablen lokale Variablen verwenden soll.
Das Problem ist aber, dass ich die TextViews nicht nur in der onCreate verwende, sondern in einer weiteren Methode. Das hieße ja, wenn ich alle TextViews als lokale Variablen in der onCreate erzeuge, müsste ich quasi meine zweite Methode mit all den TextViews als Argument aufrufen. Die Lösung finde ich auch nicht so schön.
Code:
public class ActAchievement extends AppCompatActivity {
private TextView tvAchieve1;
private TextView tvAchieve2;
private TextView tvAchieve3;
private TextView tvAchieve4;
private TextView tvAchieve5;
private TextView tvAchieve6;
private TextView tvAchieveSub2;
private TextView tvAchieveSub3;
private TextView tvAchieveSub4;
private TextView tvAchieveSub5;
private TextView tvAchieveSub6;
private TextView tvCurrentRank;
private TextView tvCurrentQuestions;
private int correctQuestions;
private Cursor questionCursor;
private String currentRank;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_achievement);
tvCurrentRank = (TextView) findViewById(R.id.tv_current_rank);
tvCurrentQuestions = (TextView) findViewById(R.id.tv_current_questions);
tvAchieve1 = (TextView) findViewById(R.id.tv_achieve1);
tvAchieve2 = (TextView) findViewById(R.id.tv_achieve2);
tvAchieve3 = (TextView) findViewById(R.id.tv_achieve3);
tvAchieve4 = (TextView) findViewById(R.id.tv_achieve4);
tvAchieve5 = (TextView) findViewById(R.id.tv_achieve5);
tvAchieve6 = (TextView) findViewById(R.id.tv_achieve6);
tvAchieveSub2 = (TextView) findViewById(R.id.tv_achieve_sub2);
tvAchieveSub3 = (TextView) findViewById(R.id.tv_achieve_sub3);
tvAchieveSub4 = (TextView) findViewById(R.id.tv_achieve_sub4);
tvAchieveSub5 = (TextView) findViewById(R.id.tv_achieve_sub5);
tvAchieveSub6 = (TextView) findViewById(R.id.tv_achieve_sub6);
currentRank = getResources().getString(R.string.currentRank);
detectRank();
}
public void detectRank() {
questionCursor = MyDatabase.getInstance(this).getCorrectQuestions();
correctQuestions = questionCursor.getInt(questionCursor.getColumnIndexOrThrow((MyDatabase.ResultColumns.CORRECT)));
tvCurrentRank.setText(currentRank + " " + tvAchieve1.getText());
tvCurrentQuestions.setText(correctQuestions + "/255");
if (correctQuestions >= 5) {
setRank(tvAchieve2, tvAchieveSub2);
}
if (correctQuestions >= 10) {
setRank(tvAchieve3, tvAchieveSub3);
}
if (correctQuestions >= 150) {
setRank(tvAchieve4, tvAchieveSub4);
}
if (correctQuestions >= 200) {
setRank(tvAchieve5, tvAchieveSub5);
}
if (correctQuestions == 255) {
setRank(tvAchieve6, tvAchieveSub6);
}
}
public void setRank(TextView tvAchieve, TextView tvAchieveSub) {
tvCurrentRank.setText(currentRank + " " + tvAchieve.getText());
tvAchieve.setTextColor(ContextCompat.getColor(this, R.color.colorAccent));
tvAchieveSub.setTextColor(ContextCompat.getColor(this, R.color.colorAccent));
}
}
Verstehe ich hier etwas falsch?
Zuletzt bearbeitet: