Jump to content

Archived

This topic is now archived and is closed to further replies.

anthebest

activity sur plusieurs fichiers

Recommended Posts

Bonjour.

Je suis débutant et je voudrai pour que ce soit plus propre répartir mon activité en plusieurs classes.

j'ai mon MainActivity:

package isep.appli.je;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity implements View.onclickListener {
Button b = null;

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

 b = (Button) findViewById(R.id.button1);
 b.setonclickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
 getMenuInflater().inflate(R.menu.activity_main, menu);
 return true;
}


public void onclick(View v) {
 Menu m = new Menu();
}
}

et mon Menu.java

package isep.appli.je;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class Menu extends Activity implements View.onclickListener{
private Button news;
private Button profil;
private Button planning;
private Button notes;
private Button test;
private Button annuaire;
@Override
public menu(){
 setContentView(R.layout.menu);

news = (Button) findViewById(R.id.news);
profil = (Button) findViewById(R.id.profil);
planning = (Button) findViewById(R.id.planning);
notes = (Button) findViewById(R.id.notes);
test = (Button) findViewById(R.id.test);
annuaire = (Button) findViewById(R.id.annuaire);
}
public void onclick(View arg0) {
switch(arg0.getId()){
case R.id.news:
news.setText("Test");
break;
case R.id.profil:
break;
case R.id.planning:
break;
case R.id.notes:
break;
case R.id.test:
break;
case R.id.annuaire:
break;
}
}
}

le problème est

Menu m = new Menu();

je ne peux pas l'instancier, ce ne doit donc pas être comme ça qu'il faut faire

Merci :D

Share this post


Link to post
Share on other sites

Effectivement, cela ne marche pas car une Activity (ta classe Menu hérite de Activity) ne peut être instanciée que par Android

Quel est ton besoin, et qu'est-ce que tu cherches à faire, notamment lorsque l'utilisateur clique sur le bouton ?

Share this post


Link to post
Share on other sites

Wé faut voir ce que tu veux faire.

Le onCreateOptionsMenu sert à faire un menu de base d'android comme expliqué ici:

http://developer.and...s/ui/menus.html

Définition du layout du menu dans onCreateOptionsMenu récupération des events de selection dans onOptionsItemSelected.

Edit: Les menus contextuels sont expliqués plus bas.

Share this post


Link to post
Share on other sites

Ben c'est qu'elle ne représente rien ton activity menu dans l'état.

Le plus simple c'est d'imaginer que t'as une vue par activity, si tu veux vraiment en faire une activity va lui falloir les méthodes de base (oncreate,...) et dans sa déclaration lui rajouter extends Activity et la déclarer dans le manifest ensuite tu peux la lancer avec :

Intent intent = new Intent(Activity.this, ActivityToLaunch.class);
startActivity(intent);		 // lance la nouvelle activité
this.finish();					 // finis l'activité en cours

Mais si tu veux juste faire un dialog style messagebox avec bouton c'est pas la même.

On peut passer des valeurs entre activité avec les bundles, ex:

Intent intent = new Intent(MiscActivity.this, InstallerActivity.class);
Bundle bd = new Bundle();
bd.putBoolean("uninstall", true);
intent.putExtras(bd);
startActivity(intent);
this.finish();

Et tu le récup dans ta new activity avec:

Bundle b = getIntent().getExtras();
if (b != null)
uninstall = b.getBoolean("uninstall", false);

Share this post


Link to post
Share on other sites

Merci, c'est ceux que j'essai de faire, mais à chaque fois ça plante

package isep.appli.je;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity implements View.onclickListener {
Button b = null;

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

 b = (Button) findViewById(R.id.button1);
 b.setonclickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
 getMenuInflater().inflate(R.menu.activity_main, menu);
 return true;
}


public void onclick(View v) {
 Intent intent = new Intent(MainActivity.this, Menu.class);
 startActivity(intent);
 this.finish();
}
}

package isep.appli.je;
import android.os.Bundle;
import android.app.Activity;
public class Menu extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.menu);

}

}

j'ai aussi ajouté

<activity android:name=".Menu" ></activity>

dans mon manifest

Share this post


Link to post
Share on other sites

N'hésite pas à utiliser le déboggeur, elle plante sur le setContentView à priori vu qu'il n'y a rien d'autre :P

Donc soit le xml foireux soit tu ne l'as pas déclaré dans le manifest, ça se voit dans le logcat ça !!!

<activity android:name=".InstallerActivity" android:label="@string/app_name" android:theme="@style/Theme.Sherlock"
	    android:configChanges="keyboardHidden|orientation|screenSize"
	    android:screenOrientation="portrait">
	    <intent-filter>
		    <action android:name="android.intent.action.MAIN" />
		    <category android:name="android.intent.category.LAUNCHER" />
	    </intent-filter>
    </activity>
    <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/Theme.Sherlock"
	    android:configChanges="keyboardHidden|orientation|screenSize"
	    android:screenOrientation="portrait">
    </activity>
....
    <activity android:name=".LogsActivity" android:label="@string/app_logs" android:theme="@style/Theme.Sherlock"
	    android:configChanges="keyboardHidden|orientation|screenSize"
	    android:screenOrientation="portrait"
	    android:windowSoftInputMode="stateHidden">
    </activity>

Chaque activité doit être déclaré.

Share this post


Link to post
Share on other sites

j'ai deux AndroidManifest.xml

et dans les deux j'ai:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="isep.appli.je"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
 android:minSdkVersion="8"
 android:targetSdkVersion="15" />
<application
 android:icon="@drawable/ic_launcher"
 android:label="@string/app_name"
 android:theme="@style/AppTheme" >
 <activity
	 android:name=".MainActivity"
	 android:label="@string/title_activity_main" >
	 <intent-filter>
		 <action android:name="android.intent.action.MAIN" />
		 <category android:name="android.intent.category.LAUNCHER" />
	 </intent-filter>
 </activity>
 <activity android:name=".Menu" android:label="@string/menu"></activity>
</application>
</manifest>

en revanche j'ai bien comme erreur que l'activité n'est pas prouvée

Share this post


Link to post
Share on other sites

import android.view.Menu;

Intent intent = new Intent(MainActivity.this, Menu.class);

Tu devrais changer le nom de ta classe, menu c'est déjà pris.

Edit: Et utilises le déboggeur pour dire où ça bloque, c'est plus facile que de deviner :P

Share this post


Link to post
Share on other sites

Super, ça fonctionne je n'ai renommé en MainMenu.

j'ai un peut du ma pour utiliser log cat car quand je scroll pour voir les erreurs ça se fixe pendant 10s puis repart en bas

Merci beaucoup

Share this post


Link to post
Share on other sites

Le bouton en haut à droite sur la vue du logcat, ça bloque le scroll :)

Share this post


Link to post
Share on other sites





×
×
  • Create New...