Halloweenská akce! Na stránce s dobitím bodů zadej dole kód STRASIDELNYCH20 a získej porci +20% bodů zdarma!
Akce končí 31.10. o půlnoci.

Diskuze: Android Studio

Java Java Android Studio American English version English version

Aktivity (1)
Avatar
John Ronald Reuel Tolkien:5. července 21:01

Zdravím, chci vytvořit kalkulačku v Android studiu. Vím přibližně jak na to, naházet tlačítka s čísly 1-9 a s operátory na screen, a pak je v java kódu nadeklarovat. Pak ještě udělat pro každé tlačítko funkci, aby připsalo svoji hodnotu do číselného inputu. To mi přijde ale dost zdlouhavé, nešlo by udělat něco podobného jako v JS a vytvořit devět nebo více tlačítek pomocí kódu ? (něco jako create element). A pak taky, něco abych nemusel deklarovat každé tlačítko zvlášť ?
Předem děkuji za odpověď

Zkusil jsem:

Chci docílit:

 
Odpovědět 5. července 21:01
Avatar
Odpovídá na John Ronald Reuel Tolkien
Matúš Olejník:5. července 23:02

Ahoj, keď už si si ich vyklikal v editori tak si môžeš v aktivite uložiť ich idčka do pola usporiadaného tak aby index prvku zodpovedal hodnote ktorú chceš po kliknutí vypísať a potom tým polom len preiterovať a nastaviť click listenery. Rovnako by si ich mohol v cykle dynamicky vytvoriť.

public class StartActivity extends Activity {

    private static final int[] buttonsId = new int[]{R.id.button0, R.id.button1}; //... R.id.button9

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);

        for(int i = 0; i < buttonsId.length; i++){
            Button button = findViewById(buttonsId[i]);
            final int finalI = i;
            button.setOnClickListener((View click) -> processInput(finalI));
        }
    }

    private void processInput(int number){
        //vypis hodnotu
        //sprav matematicku operaciu
    }
}
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 5. července 23:02
/* I am not sure why this works but it fixes the problem */
Avatar
Odpovídá na Matúš Olejník
John Ronald Reuel Tolkien:6. července 11:48

Dík, přesně to jsem potřeboval vědět.

 
Nahoru Odpovědět 6. července 11:48
Avatar
Odpovídá na Matúš Olejník
John Ronald Reuel Tolkien:6. července 11:53

Jo, akorát ještě s tou metodou. Když ji napíšu tam kde ji máš Ty, android Studio mi to hlásí že je očekáván středník.Teprve až když tu funkci posunu za tu jednu složenou závorku, přestane to hlásit chybu. Jakto ?

 
Nahoru Odpovědět 6. července 11:53
Avatar
Odpovídá na John Ronald Reuel Tolkien
Matúš Olejník:6. července 12:13

Pošli kód pri ktorom ti to hlási chybu :)

Nahoru Odpovědět 6. července 12:13
/* I am not sure why this works but it fixes the problem */
Avatar
John Ronald Reuel Tolkien:6. července 12:15
package ie.connect.dr_noodle_final;

import android.content.Intent;
import android.content.res.Resources;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

import java.lang.ref.Reference;
import java.lang.reflect.Array;
import java.sql.RowId;

public class disease_menu extends AppCompatActivity {
    String[] menu;
    ListView list;
String [] info;

    @Override
    protected void onCreate(Bundle savedInstanceState) {


        Intent intent = getIntent();
         info = intent.getStringArrayExtra("name-of-disease.connect.ie");
        Resources res = getResources();


        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_disease_menu);
        list = (ListView) findViewById(R.id.menu_view);
        int itemNumber = intent.getIntExtra("name-of-disease.connect.ie", -1);

        TextView nadpis = (TextView)findViewById(R.id.textView2);
       nadpis.setText(info[0].toString().toUpperCase());

 if (info[0].equals("diabetes")) {
     switch (info[1]) {
         case "0":
             menu = res.getStringArray(R.array.diabetes_menu);
             break;
         case "1":
             menu = res.getStringArray(R.array.diabetes_meditations);
             break;
         case "2":
             menu = res.getStringArray(R.array.diabetes_complications);
             break;

         case "3":
             menu = res.getStringArray(R.array.diabetes_services);
             break;

     }
 }
 else if (info[0].equals("cancer"))
 {
     switch (info[1]) {
         case "0":
             menu = res.getStringArray(R.array.cancer_menu);
             break;
         case "1":
             menu = res.getStringArray(R.array.cancer_meditations);
             break;
         case "2":
             menu = res.getStringArray(R.array.cancer_complications);
             break;
         case "3":
             menu = res.getStringArray(R.array.cancer_services);
             break;
     }


 }
 else if (info[0].equals("cold"))
 {
     switch (info[1]) {
         case "0":
             menu = res.getStringArray(R.array.cold_menu);
             break;
         case "1":
             menu = res.getStringArray(R.array.cold_meditations);
             break;
         case "2":
             menu = res.getStringArray(R.array.cold_complications);
             break;
         case "3":
             menu = res.getStringArray(R.array.cold_services);
             break;
     }


 }
 else
 {
     switch (info[1]) {
         case "0":
             menu = res.getStringArray(R.array.flu_menu);
             break;
         case "1":
             menu = res.getStringArray(R.array.flu_meditations);
             break;
         case "2":
             menu = res.getStringArray(R.array.flu_complications);
             break;
         case "3":
             menu = res.getStringArray(R.array.flu_services);
             break;
     }


 }
        menu_items items = new menu_items(this, menu);
        list.setAdapter(items);

        // onclick events for buttons
        Button btnMenu = findViewById(R.id.btn_menu);

        btnMenu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent openMenu = new Intent(getApplicationContext(),Start_screen.class);
                startActivity(openMenu);
            }
        });
        //_____________________________________________-
        Button btnBack = findViewById(R.id.btn_back);
        btnBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent back = new Intent(getApplicationContext(),about_disease.class);
                startActivity(back);
            }
        });
        final String disease = info[0];
        ListView list = findViewById(R.id.menu_view);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
               Intent gotoArticle = new Intent(getApplicationContext(),Articles.class);
               String [] array = {disease,i+"",info[1]};
                       gotoArticle.putExtra("item",array);
               startActivity(gotoArticle);
            }
        });

public void Metoda(int a)
        {


        }
    }


}
 
Nahoru Odpovědět 6. července 12:15
Avatar
Odpovídá na John Ronald Reuel Tolkien
Matúš Olejník:6. července 12:34

Neviem či som slepý ale nevidím, že by si tam mal ten for cyklus pre nastavenie listenerov :D
Ak myslíš ten riadok public void Metoda(int a) tak tam píše že očakáva bodkočiarku pretože je vo vnútri metódy onCreate. V tom mojom kúsku kódu mám metódu processInput mimo metódy onCreate.

Nahoru Odpovědět 6. července 12:34
/* I am not sure why this works but it fixes the problem */
Avatar
John Ronald Reuel Tolkien:6. července 12:46

Jo ten cyklus jsem tam ještě nedal :D ale dík za radu

 
Nahoru Odpovědět  +1 6. července 12:46
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.