Hallo liebe Gemeinde,
ich wende mich an euch, da ich folgendes Problem habe und hoffe, dass ihr mit euren Kentnissen und Erfahrungen mir helfen könnt.
Ich programmiere gerade nur aus langeweile eine App, die es bereits im playstore gibt. Diese heißt CSGuns. Eigentlich eine einfach gebaute app mit einer Listview zubeginn und darauffolgenden wird eine imageview angezeigt, die die gewählte waffe anzeigt und beim draufklicken entsprechend den schuss abgibt. Ich möchte diese nun nachahmen bzw. grafisch verändern und einige sachen miteinbauen.
Bin schon relativ weit gekommen. Allerdings ist mir aufgefallen, dass wenn ich eine waffe aus der listview auswähle, die anschließend öffnende activity Lebenszyklus zweimal durchläuft. Weiß leider nicht warum.
Hier ist meine mainActivity, die zu Beginn die expanded Listview anzeigt:
public class MainActivity extends Activity {
ExpandableListAdapter listAdapter;
ExpandableListView expListView;
WeaponList listData = new WeaponList();
MediaPlayerService playerService = new MediaPlayerService(this);
public static StatusCheck checkBombStatus = new StatusCheck();
String weapon = null;
Intent openGameplay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
...
// Listview on child click listener
expListView.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
weapon = listData.listDataChild.get(listData.listDataHeader.get(groupPosition)).get(childPosition);
openGameplay = new Intent(getApplicationContext(), GamePlay.class);
openGameplay.putExtra("weapon", weapon);
startActivity(openGameplay);
return false;
}
});
}
...
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("+++++++++++++++++++++++++", "MAIN - onDestroy");
}
@Override
protected void onStart() {
..
}
@Override
protected void onRestart() {
..
}
@Override
protected void onResume() {
..
}
@Override
protected void onPause() {
..
}
@Override
protected void onStop() {
..
}
}
Alles anzeigen
Nachdem ein item aus der listview ausgewählt wurde, wird eine 2. activity "Gameplay" geöffnet, welches die waffe anzeigt:
public class GamePlay extends Activity {
ImageView imageView;
TextView total_ammo, current_ammo, weapon_art;
ImageButton reload;
String weapon;
SoundList soundList = new SoundList();
int i = 0;
private static int soundID;
int j = 0;
static boolean loaded = false;
public static StatusCheck statusCheck = new StatusCheck();
// onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gameplay);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// init layout
imageView = (ImageView) findViewById(R.id.imageView1);
total_ammo = (TextView) findViewById(R.id.textView_totalAmo);
current_ammo = (TextView) findViewById(R.id.textView_currentAmo);
weapon_art = (TextView) findViewById(R.id.textView_weaponArt);
reload = (ImageButton) findViewById(R.id.imageButton_reload);
// get Weapon-art from MainActivity
Bundle extras = getIntent().getExtras();
// init sound
soundList.prepareSoundData();
// load grafik
loadweapon(weapon = extras.getString("weapon"));
// load sound
loadsound();
/// Aktion: Klick auf das Bild löst sound aus + current_Amo wird aktualisert.
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
...
}
private void loadweapon(String weapon) {
}
private void loadsound() {
}
private void setDisplayViewsToInvisible() {
reload.setVisibility(View.INVISIBLE);
total_ammo.setVisibility(View.INVISIBLE);
current_ammo.setVisibility(View.INVISIBLE);
}
@Override
protected void onDestroy() {
..
}
..
}
Alles anzeigen
Mein Code ist nicht gerade effizient geschrieben, aber das wichtige ist das es ersteinmal funktioniert.
So, also wenn ich die app starte, bekomme ich im Log folgendes:
03-12 10:45:47.233: E/+++++++++++++++++++++++++(10323): MAIN - onStart
03-12 10:45:47.233: E/+++++++++++++++++++++++++(10323): MAIN - onResume
03-12 10:45:47.240: D/OpenGLRenderer(10323): Render dirty regions requested: false
03-12 10:45:47.448: D/Atlas(10323): Validating map...
03-12 10:45:47.685: D/libEGL(10323): loaded /system/lib/egl/libEGL_tegra.so
03-12 10:45:47.686: E/(10323): file /data/data/com.nvidia.NvCPLSvc/files/driverlist.txt: not found!
03-12 10:45:47.686: I/(10323): Attempting to load EGL implementation /system/lib//egl/libEGL_tegra_impl
03-12 10:45:47.773: I/(10323): Loaded EGL implementation /system/lib//egl/libEGL_tegra_impl
03-12 10:45:47.776: D/libEGL(10323): loaded /system/lib/egl/libGLESv1_CM_tegra.so
03-12 10:45:47.819: D/libEGL(10323): loaded /system/lib/egl/libGLESv2_tegra.so
03-12 10:45:47.832: I/OpenGLRenderer(10323): Initialized EGL, version 1.4
03-12 10:45:47.902: I/(10323): Loading GLESv2 implementation /system/lib//egl/libGLESv2_tegra_impl
03-12 10:45:47.903: D/OpenGLRenderer(10323): Enabling debug mode 0
03-12 10:45:48.271: I/Timeline(10323): Timeline: Activity_idle id: android.os.BinderProxy@35ebf535 time:19524165
Alles anzeigen
Soweit so gut. Wenn ich nun eine waffe auswähle, erhalte ich im Log das hier:
03-12 10:59:53.419: I/Timeline(10323): Timeline: Activity_idle id: android.os.BinderProxy@35ebf535 time:20369313
03-12 10:59:55.626: I/Timeline(10323): Timeline: Activity_launch_request id:cs16.tacticalguns time:20371521
03-12 10:59:55.676: E/+++++++++++++++++++++++++(10323): MAIN - onPause
03-12 10:59:56.205: E/ExtMediaPlayer-JNI(10323): QCMediaPlayer could not be located....
03-12 10:59:56.205: E/MediaPlayer-JNI(10323): QCMediaPlayer mediaplayer NOT present
03-12 10:59:56.230: E/MediaPlayer(10323): Should have subtitle controller already set
03-12 10:59:56.231: E/+++++++++++++++++++++++++(10323): Game - onStart
03-12 10:59:56.232: E/+++++++++++++++++++++++++(10323): Game - onResume
03-12 10:59:56.238: E/+++++++++++++++++++++++++(10323): Game - onPause
03-12 10:59:56.238: E/+++++++++++++++++++++++++(10323): Game - onStop
03-12 10:59:56.238: E/+++++++++++++++++++++++++(10323): Game - onDestroy
03-12 10:59:56.256: E/ExtMediaPlayer-JNI(10323): QCMediaPlayer could not be located....
03-12 10:59:56.256: E/MediaPlayer-JNI(10323): QCMediaPlayer mediaplayer NOT present
03-12 10:59:56.276: E/MediaPlayer(10323): Should have subtitle controller already set
03-12 10:59:56.277: E/+++++++++++++++++++++++++(10323): Game - onStart
03-12 10:59:56.277: E/+++++++++++++++++++++++++(10323): Game - onResume
03-12 10:59:56.282: E/MediaPlayer(10323): Should have subtitle controller already set
03-12 10:59:56.361: E/MediaPlayer(10323): Should have subtitle controller already set
03-12 10:59:56.418: I/Timeline(10323): Timeline: Activity_idle id: android.os.BinderProxy@3671afcc time:20372312
03-12 10:59:56.426: I/Timeline(10323): Timeline: Activity_idle id: android.os.BinderProxy@3671afcc time:20372321
03-12 10:59:56.459: E/+++++++++++++++++++++++++(10323): MAIN - onStop
Alles anzeigen
die aktivity wird zwar ausgefürht und funktioniert auch wenn ich auf die imageview klicke, aber laut Log wird der Zyklus ausgeführt dann beendet und erneut gestartet. Warum eigentlich und woran liegt das?
Sry das ich soviel gepostet habe. Möchte euch halt nur den überblick besser verschaffen. Hoffentlich waren meine Fragen verständlich. Falls nicht, bitte fragen
Falls diese Frage(n) geklärt sind, würde ich dann mein 2. Anliegen hier posten.
Ansonsten freue ich mich schon mal auf eure hilfen/tipps und bedanke mich im voraus.
Viele Grüße