NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: android activity

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Endy
Člen
Avatar
Endy:8.10.2016 18:52

Ahoj, potřeboval bych radu. Jsem začátečník z javou a z programováním na adroid všeobecně a řeším teď jeden problém.
Chci z jiné aktivity pomoci tří buttonu (jeden na modrou,druhy cervena,treti zelena) měnit backgroundcolor u hlavní aktivity, tedy u jiné než se nachází tlačítka. Zkoušel jsem to přes StartActivity­ForResult za každou radu budu vděčný.

**Main**

public class MainActivity extends AppCompatActivity {

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

        Intent intent =new Intent();
        intent.putExtra("activity_main",Color.GREEN);
        setResult(0,intent);

        finish();

    }
}
public class Color extends AppCompatActivity implements View.OnClickListener {
    Button btn;
    Button btn2;
    Button btn3;
    int REQ_CODE=1;

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

        btn= (Button) findViewById(R.id.button);
        btn2= (Button) findViewById(R.id.button2);
        btn3= (Button) findViewById(R.id.button3);


        btn.setOnClickListener(this);


    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(Color.this, MainActivity.class);
        startActivityForResult(intent, REQ_CODE);
    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="moje.appkabarva.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>
 
Odpovědět
8.10.2016 18:52
Avatar
mara
Člen
Avatar
mara:8.10.2016 20:53

Ahoj,

moc nevidím důvod, proč by se to mělo měnit takhle, ale můžeš to udělat třeba tak, že budeš barvu, která se má zobrazit na pozadí načítat z SharedPreferences a změníš v jiné aktivitě právě tu proměnou, která bude udávat barvu pozadí.

Nahoru Odpovědět
8.10.2016 20:53
Co na srdci, to na Facebooku
Avatar
Odpovídá na Endy
Petr Štechmüller:8.10.2016 22:27

Ahoj, jsi blízko, jen ti chybí přepsání metody onActivityResult kde uvidíš výsledek.
Pro jistotu jsem udělal rychlý example.

1. MainActivity:

public class MainActivity extends AppCompatActivity {

    // ID requestu pro změnu barvy
    private static final int REQUEST_COLOR = 1;

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

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            // Jedná-li se o můj request
            case REQUEST_COLOR:
                if (resultCode == RESULT_OK) { // A request byl úspěšný
                    Toast.makeText(this, "Teď si můžeš změnit barvu", Toast.LENGTH_LONG).show();
                    // Takto získám výsledek
                    Colors requestedColor = (Colors) data.getSerializableExtra(ColorChangeActivity.COLOR);
                }
                break;
            default:
                super.onActivityResult(requestCode, resultCode, data);
        }
    }

    public void handleClick(View view) {
        // Reakce na tlačítko, které vyvolá novou aktivity, kde si vybereš svojí barvu
        // Jako parametr se předává:
        //      "this" - instance této aktivity
        //      "ColorChangeActivity.class" - třída, která představuje volanou aktivitu
        //      "REQUEST_COLOR" - ID requestu

        startActivityForResult(new Intent(this, ColorChangeActivity.class), REQUEST_COLOR);
    }
}

2. ColorChangeAc­tivity:

public class ColorChangeActivity extends AppCompatActivity {

    // Mnou definovaný výčtový typ barev
    private Colors color = Colors.BLUE;

    public static final String COLOR = "color";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_color_change);
        // Výchozí výsledek je "RESULT_CANCELED"
        setResult(RESULT_CANCELED);
    }

    // Handler, který se zavolá při stisku tlačítka pro výběr barvy
    public void handleChangeColor(View view) {
        int id = view.getId();

        switch (id) {
            case R.id.btnBlue:
                color = Colors.BLUE;
                break;
            case R.id.btnGreen:
                color = Colors.GREEN;
                break;
            case R.id.btnRed:
                color = Colors.RED;
                break;
        }
    }

    // Když zruším výběr barvy
    public void onCancel(View view) {
        finish();
    }

    // Když kliknu na tlačítko OK pro vybrání nové barvy
    public void onHandleOk(View view) {
        Intent result = new Intent();
        // Do intentu vložím novou barvu
        result.putExtra(COLOR, color);
        // Intent vložím jako výsledek aktivity
        setResult(RESULT_OK, result);
        finish();
    }
}

3. Colors - použitý výčtový typ

public enum Colors {
    BLUE, GREEN, RED
}

4. Layouty jednotlivých aktivit:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Pozadavek na zmenu barvy"
        android:onClick="handleClick"/>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_color_change"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical">

    <Button
        android:id="@+id/btnGreen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Zelená"
        android:onClick="handleChangeColor"/>

    <Button
        android:id="@+id/btnBlue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Modrá"
        android:onClick="handleChangeColor"/>

    <Button
        android:id="@+id/btnRed"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Červená"
        android:onClick="handleChangeColor"/>

    <LinearLayout
        style="?android:actionBarStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/buttonCancel"
            style="?android:actionButtonStyle"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="onCancel"
            android:text="@android:string/cancel" />

        <Button
            android:id="@+id/buttonRename"
            style="?android:actionButtonStyle"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="onHandleOk"
            android:text="@android:string/ok" />
    </LinearLayout>

</LinearLayout>

Kód jsem netestoval, tak v něm můžou být chyby...

Nahoru Odpovědět
8.10.2016 22:27
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Endy
Člen
Avatar
Endy:9.10.2016 18:27

Ahoj,děkuji za odpověď nějak se mi to tvoje řešení nepodařilo rozjet, sice ho spustím ale po kliknutí na změnu barvy mi aplikace spadne.Chtěl bych se ještě zeptat, mám menu a po kliknutí na jednu položku z nich se mi spustí nova aktivita v té aktivitě mám obrázek a chci že když kliknu na obrázek aby se mi změnilo pozadí v hlavní aktivitě mohl by mi někdo poslat nějaký navrh jak to udělat ?

 
Nahoru Odpovědět
9.10.2016 18:27
Avatar
Endy
Člen
Avatar
Odpovídá na Endy
Endy:9.10.2016 18:38

Zkoušel jsem vytvořit OnActivityResult() ale teď přesně nevím jak ten obrázek nastavit

public class Main3Activity extends AppCompatActivity {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
 green = (ImageView) findViewById(R.id.green);


        green.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("wallpaper", "tapeta");
                setResult(2, intent);
                finish();
            }
        });


    }
public class MainActivity extends AppCompatActivity  {


    RelativeLayout wallpaper;


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



        wallpaper=(RelativeLayout) findViewById(R.id.main_layout);

    }

    public void getwallpaper(View v)
    {
        Intent Getwallpaper=new Intent(this,Main3Activity.class);
        startActivityForResult(Getwallpaper,2);

    }

    protected void onActivityResult(int requestCode,int resultCode,Intent data)
    {
        super.onActivityResult( requestCode,resultCode,data);

        if (requestCode==2)
        {
            if(data!=null)
            {



            }

        }

    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();
        if(id == R.id.item1)
        {
            Intent intent = new Intent(this, Main2Activity.class);
            startActivity(intent);

        }

        else if (id==R.id.action_settings)
        {
            Intent intent2 = new Intent(this, Main3Activity.class);
            startActivity(intent2);
        }

        return super.onOptionsItemSelected(item);
    }



}
Editováno 9.10.2016 18:40
 
Nahoru Odpovědět
9.10.2016 18:38
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 5 zpráv z 5.