Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Android programming

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allemaal,
Ben met een vriend van mij al enige tijd bezig met een scheikunde app maken als profielwerkstuk. Wij hebben al wat kennis over Java en hebben al redelijk wat geleerd over het programmeren dankzij thenewboston.com en uitproberen van dingen. Nu lopen wij tegen het volgende probleem aan:

Wij hebben een startscherm geprogrammeerd die zich toont bij opstarten van de app, en na 5 seconden automatisch verdwijnt. Na 5 seconden zou deze het volgende scherm (de volgende class) moeten starten, echter bij het uitproberen in de AVD blijft het startscherm voor ongeveer 20 seconden staan waarna de app crasht. We hebben al veel nagelopen maar vonden nog geen oplossing.

Manifest van de app: ("Splash" is de naam van het startscherm, "MainActivity" is de class die na Splash moet worden geactiveerd)

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="pws.chemistryapp"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
       
        <activity
            android:name="pws.chemistryapp.Splash"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <activity
            android:name="pws.chemistryapp.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        
        </application>

</manifest>


En het Java-bestand van "Splash":

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package pws.chemistryapp;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class Splash extends Activity{

    @Override
    protected void onCreate(Bundle splashbackground) {
        // TODO Auto-generated method stub
        super.onCreate(splashbackground);
        setContentView(R.layout.splash);
        Thread timer = new Thread(){
            public void run(){
                try{
                    sleep(5000);
                } catch (InterruptedException e){
                    e.printStackTrace();
                }finally{
                    Intent openMainActivity = new Intent("pws.chemistryapp.MainActivity");
                    startActivity(openMainActivity);
                }
            }
        };
        timer.start();
    }
    
}



Wij hebben gewoon een filmpje gevolgd die zei dat het handig was om eventuele errors/bugs te 'vangen'. Daarom deze structuur van de Thread. (Ik neem aan dat de bugcatcher ook weggelaten kan worden? maar hoe?)

Zouden jullie hier ff naar willen kijken?

Thanks!

P.S. Eclipse gaf geen bugs aan, de namen van classes etc in de Manifest en het Java bestand komen overeen en ook alle punt-komma's en accolades kloppen.

[ Voor 0% gewijzigd door NMe op 22-10-2013 17:50 . Reden: Code-tags ]


  • aegis
  • Registratie: Augustus 2002
  • Laatst online: 22-11 14:43
Ik zou je aanraden om te beginnen met het doorlezen van http://developer.android.com/index.html, en dan bedoel eigenlijk alle guides van de training.
Daarnaast moet je de intent veranderen naar
Java:
1
Intent openMainActivity = new Intent(Splash.this, MainActivity.class);

[ Voor 14% gewijzigd door aegis op 22-10-2013 17:54 ]

https://bettyskitchen.nl


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Je opzet is verkeerd. Je wil dat je main activity gewoon je hoofdmenu is (of wat er ook na je splash-screen komt). Je kan dan bij het load-event van je activity het splashscreen tonen als nieuwe intent die je na 5 seconden sluit door domweg finish() aan te roepen.

offtopic:
Ik heb je code in code tags gezet. Doe je dat de volgende keer zelf? ;) Cursieve code zonder indents leest nogal lastig.

[ Voor 33% gewijzigd door NMe op 22-10-2013 18:10 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Bedankt voor alle reacties! Ik zal er morgen naar kijken.

[ Voor 188% gewijzigd door Verwijderd op 23-10-2013 12:21 ]


Verwijderd

Topicstarter
We hebben geprobeerd om de intent te veranderen aan de hand van de suggestie van aegis, echter dit zorgt ervoor dat bij het opstarten van de app via de AVD hij meteen naar de MainActivity gaat ipv eerst Splash uit te voeren.
EDIT: Wij hebben aegis' methode toegepast én "sleep" veranderd in "Thread.sleep". Bij het opstarten van de AVD en de app verdwijnt het scherm Splash inderdaad na de ingestelde tijd. Echter bij het afsluiten van de app in de emulator (2x terug-knop) en dan weer de app opstarten duurt het opeens ruim 12 seconden voor Splash-scherm weggaat. Waar zit het probleem?

We hebben geprobeerd vanuit MainActivity de Splash activity te starten en even later te eindigen maar we hebben geen idee waar we de intent moeten plaatsen in MainActivity en wat er nog aan moet worden toegevoegd zodat het werkt.

Kan iemand ons helpen?


MainActivity.Java:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 package pws.chemistryapp;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

    int counter;
    Button add, sub;
    TextView display;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
   counter = 0;
 add = (Button) findViewById(R.id.bAdd) ;
 sub = (Button) findViewById(R.id.bSub) ;
 display = (TextView) findViewById(R.id.textView1)  ;   
 
 
 add.setOnClickListener(new View.OnClickListener() {
    
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
    counter = counter + 1;
    display.setText("Your total is " + counter);
    }
});
    
sub.setOnClickListener(new View.OnClickListener() {
    
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
    counter = counter - 1;  
    display.setText("Your total is " + counter);
    }
}); 
    
    
    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}

[ Voor 9% gewijzigd door Verwijderd op 23-10-2013 13:08 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Wat heb je met mijn commentaar gedaan? Laat de app gewoon standaard naar het menu gaan en laat dat menu vervolgens in de onStart() of onResume() een nieuwe intent maken voor het splash screen. Die activity kun je vervolgens aan het eind van de timer, zoals hierboven gezegd, gewoon finishen. Voordeel hiervan is dat mensen ook met de back-knop het splash screen kunnen overslaan en dat als mensen vanuit het hoofdmenu op de back-knop drukken, ze niet eerst nog eens het splash screen te zien krijgen. Daarbij is het gewoon "correcter" om het menu het entry point van je app te maken, niet in de laatste plaats omdat dat het later makkelijker maakt om die splash screen eruit te slopen als je dat om wat voor reden dan ook zou willen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • aegis
  • Registratie: Augustus 2002
  • Laatst online: 22-11 14:43
Ten zou niet veel tijd besteden aan de splash screen omdat het geen functie heeft, een splash is bedoeld als je iets moet laden en je wilt de gebruiker het idee geven dat de app al gestart is door bijvoorbeeld een plaatje te tonen van het scherm wat geladen wordt. Dit is later vervormd tot hoe de splash screen nu gezien word door de titel en branding van de de app te laten zien.

Daarnaast is wat NMe zegt het beste om een splash screen te tonen. in de onstart methode vand MainActivity een intent sturen naar de SplashActivity.

Java: SplashActivity.java
1
2
3
4
5
6
7
8
9
10
11
private static final long DELAYED_SECONDS = 5000;
private Handler handler = new Handler();

public void onCreate(Bundle savedInstanceState) {
handler.postDelayed(new Runnable() {
    public void run() {
         finish();
        }
    }, DELAYED_SECONDS);
 }
}

https://bettyskitchen.nl


Verwijderd

Topicstarter
Okay. Thanks! We gaan er nu mee bezig.

  • koesie10
  • Registratie: Mei 2011
  • Niet online
Let er wel op dat Google aanbeveelt om geen splashscreens te gebruiken. Het is alleen maar irritant voor gebruikers, zeker zoals in jouw app. Als het gegevens ging laden in de 5 seconden, dan zou het nog mogelijk zijn, maar je doet niks in het splashscreen dus zou ik je aanbevelen om het hele splashscreen weg te laten.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Klopt, en dat is meteen de reden dat ik zeg dat je het beter op mijn manier kan doen zodat je hem als gebruiker in elk geval weg kan drukken met de back-knop. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • dik_voormekaar
  • Registratie: April 2003
  • Laatst online: 22-11 10:49
Je kunt ook van het splashscreen een button maken, zodat je hem door kunt klikken.

Verwijderd

Topicstarter
Bedankt! We zullen hiermee aan de slag gaan.
Nog even een paar vraagjes:
We willen het Periodieke systeem (scheikunde, LINK) als activity toevoegen aan de app. We willen dit periodieke systeem opbouwen door voor elk element (zie link) een button te maken. Deze buttons komen dan naast, onder en boven elkaar en de gebruiker moet dan horizontaal kunnen scrollen omdat het geheel breder is dan het scherm.

-Hoe kunnen wij buttons zo toevoegen dat je horizontaal kan scrollen? We hebben in de graphical layout en de xml-code gepropeerd deze buttons naast elkaar te plaatsen maar we krijgen de Horizontal Scrollview niet voor elkaar. We kunnen niet het benodigde aantal buttons naast elkaar plaatsen omdat we in de graphical layout niet kunnen scrollen. Ook via de xml-code lukt het ons niet. Ligt dit aan de layout tussen de buttons (relative of linear)? We hebben hier niks concreets op internet over kunnen vinden.
-Hoe kunnen wij in de button(s) meerdere tekstjes plaatsen in verschillende lettergroottes, in super- en subscript etc? Moeten wij dan meerdere Strings maken en die samenvoegen in de button?

Zouden jullie indien mogelijk voorbeelden kunnen geven aan de hand van java/xml-code?

Alvast bedankt! :)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

http://developer.android....HorizontalScrollView.html
http://developer.android....id/widget/ScrollView.html
-Hoe kunnen wij in de button(s) meerdere tekstjes plaatsen in verschillende lettergroottes, in super- en subscript etc? Moeten wij dan meerdere Strings maken en die samenvoegen in de button?
Ja, maar die kun je natuurlijk makkelijk stylen met een style zodat je alleen de teksten erin hoeft te zetten en de style maar één keer bepaalt.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
.

[ Voor 99% gewijzigd door Verwijderd op 14-11-2013 20:29 . Reden: Sorry, was niet de bedoeling een bericht te plaatsen ]

Pagina: 1