C# týden ITnetwork Flashka zdarma
Akce! Pouze tento týden sleva až 80 % na kurzy C# .NET. Lze kombinovat s akcí 50 % bodů navíc na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!

Diskuze: Android Studio

Aktivity (2)
Avatar
John Ronald Reuel Tolkien:5.7.2018 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.7.2018 21:01
Avatar
Odpovídá na John Ronald Reuel Tolkien
Matúš Olejník:5.7.2018 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.7.2018 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.7.2018 11:48

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

 
Nahoru Odpovědět 6.7.2018 11:48
Avatar
Odpovídá na Matúš Olejník
John Ronald Reuel Tolkien:6.7.2018 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.7.2018 11:53
Avatar
Odpovídá na John Ronald Reuel Tolkien
Matúš Olejník:6.7.2018 12:13

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

Nahoru Odpovědět 6.7.2018 12:13
/* I am not sure why this works but it fixes the problem */
Avatar
John Ronald Reuel Tolkien:6.7.2018 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.7.2018 12:15
Avatar
Odpovídá na John Ronald Reuel Tolkien
Matúš Olejník:6.7.2018 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.7.2018 12:34
/* I am not sure why this works but it fixes the problem */
Avatar
John Ronald Reuel Tolkien:6.7.2018 12:46

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

 
Nahoru Odpovědět  +1 6.7.2018 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.