Diskuze: android activity
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
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í.
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. ColorChangeActivity:
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...
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 ?
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);
}
}
Zobrazeno 5 zpráv z 5.