Урок 28. Extras - передаем данные с помощью Intent
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 28. Extras - передаем данные с помощью Intent
Конструктор Activity это:
[syntax=java]public Activity() {
...
}[/syntax]
Его можно перегрузить, но вы не можете добавлять в него свои параметры.
Конструктор без параметров позволяет сделать следующую хитрость:
[syntax=java]Class activtyClass = MyActivity.class.
Activity activity = activtyClass.newInstance();[/syntax]Собственно, система такой хитростью и пользуется. И не только для Activity но и для Fragment, Service, BroadcastReceiver и многих других.
Замечание! Activity не должна иметь конструктор с параметрами.
[syntax=java]public Activity() {
...
}[/syntax]
Его можно перегрузить, но вы не можете добавлять в него свои параметры.
Конструктор без параметров позволяет сделать следующую хитрость:
[syntax=java]Class activtyClass = MyActivity.class.
Activity activity = activtyClass.newInstance();[/syntax]Собственно, система такой хитростью и пользуется. И не только для Activity но и для Fragment, Service, BroadcastReceiver и многих других.
Замечание! Activity не должна иметь конструктор с параметрами.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 28. Extras - передаем данные с помощью Intent
Вы в этом уверенны ?Fry писал(а):
Вот у Активити ведь конструктор
Re: Урок 28. Extras - передаем данные с помощью Intent
Это ж классaltwin писал(а): Вот у Активити ведь конструктор
Вы в этом уверенны ?
Не знаю правда, как активити вызвать без интента, а он на вход принимает не объект а класс )
Arbeit macht Fry
Re: Урок 28. Extras - передаем данные с помощью Intent
Это интересно )KamiSempai писал(а): Его можно перегрузить, но вы не можете добавлять в него свои параметры.
[syntax=java]Activity activity = activtyClass.newInstance();[/syntax]
У меня вызывает ошибку.
Error:(43, 53) error: incompatible types: Object cannot be converted to Activity
ЗЫ. Если удастся так сделать, можно ведь задействовать сеттеры для передачи данных в объект активити. Опять таки - любые данные без заморочек
Arbeit macht Fry
Re: Урок 28. Extras - передаем данные с помощью Intent
Собственно все ответы тут: https://github.com/android/platform_fra ... .java#L660Fry писал(а):Это ж классaltwin писал(а): Вот у Активити ведь конструктор
Вы в этом уверенны ?
ну а интент.. это же всеголишь интент и он тут: https://github.com/android/platform_fra ... .java#L814
Activity -это действительно просто класс содержащий логику о порядке вызова методов + инициализирующий переменные. Я вообще давно об этом не думал и не обращал внимание, но мне проще думать, что у Activity - нет конструктора.
Если честно я не особо помню, но если не ошибаюсь сам контекст формируется тут: https://github.com/android/platform_fra ... .java#L669 , ну а остальное - просто цепочка методов, т.е. даже если бы у Activity и был конструктор - переобпределять его бесполезно, т.к. во первых объект не создается, во вторых он всеравно не будет задействован в цепочке инициализации.
-
- Сообщения: 6
- Зарегистрирован: 14 май 2015, 21:48
Re: Урок 28. Extras - передаем данные с помощью Intent
Поскажите что не так в коде. Заранее спасибо.
мейн
package ua.lion.extrasint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements View.OnClickListener {
TextView tv;
Button btn;
int num;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.textView);
btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(this);
num = 5;
}
@Override
public void onClick(View v) {
Intent inp = new Intent(this, Calc.class);
inp.putExtra("inter", num);
startActivity(inp);
}
}
второй активити
package ua.lion.extrasint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class Calc extends Activity {
TextView tv2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calc);
tv2 = (TextView)findViewById(R.id.tv2);
Intent intent = getIntent();
int number = intent.getIntExtra("inter", 0);
tv2.setText(number);
}
}
мейн
package ua.lion.extrasint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements View.OnClickListener {
TextView tv;
Button btn;
int num;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.textView);
btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(this);
num = 5;
}
@Override
public void onClick(View v) {
Intent inp = new Intent(this, Calc.class);
inp.putExtra("inter", num);
startActivity(inp);
}
}
второй активити
package ua.lion.extrasint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class Calc extends Activity {
TextView tv2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calc);
tv2 = (TextView)findViewById(R.id.tv2);
Intent intent = getIntent();
int number = intent.getIntExtra("inter", 0);
tv2.setText(number);
}
}
Последний раз редактировалось RuslanLion 21 июн 2015, 15:38, всего редактировалось 1 раз.
Re: Урок 28. Extras - передаем данные с помощью Intent
Горячая тема.. ух
может кто подскажет, как открыть приложение "стандартные заметки" из своего приложения
может кто подскажет, как открыть приложение "стандартные заметки" из своего приложения
Re: Урок 28. Extras - передаем данные с помощью Intent
Добрый день.
Данный вопрос уже неоднократно звучал в этой ветке, но я чего-то недопонял...
У меня не получается передать int из одного activity в другой.
[syntax=java]
package ua.pp.dreamer.rent.v1;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends ActionBarActivity implements OnClickListener {
EditText Mounth_input;
EditText Year_input;
EditText RentPay_input;
EditText ELimit_input;
EditText ELowPrice_input;
EditText EHiPrice_input;
EditText EPrevious_input;
EditText ECurrent_input;
EditText WPrice_input;
EditText WPrevious_input;
EditText WCurrent_input;
EditText Heating_input;
EditText Debt_input;
Button button_calc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Mounth_input = (EditText) findViewById(R.id.Mounth_input);
Year_input = (EditText) findViewById(R.id.Year_input);
RentPay_input = (EditText) findViewById(R.id.RentPay_input);
ELimit_input = (EditText) findViewById(R.id.ELimit_input);
ELowPrice_input = (EditText) findViewById(R.id.ELowPrice_input);
EHiPrice_input = (EditText) findViewById(R.id.EHiPrice_input);
EPrevious_input = (EditText) findViewById(R.id.EPrevious_input);
ECurrent_input = (EditText) findViewById(R.id.ECurrent_input);
WPrice_input = (EditText) findViewById(R.id.WPrice_input);
WPrevious_input = (EditText) findViewById(R.id.WPrevious_input);
WCurrent_input = (EditText) findViewById(R.id.WCurrent_input);
Heating_input = (EditText) findViewById(R.id.Heating_input);
Debt_input = (EditText) findViewById(R.id.Debt_input);
button_calc = (Button) findViewById(R.id.button_calc);
button_calc.setOnClickListener(this);
}
@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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent (this, CalcActivity.class);
intent.putExtra("Mounth_input", Mounth_input.getText().toString());
intent.putExtra("Year_input", Year_input.getText().toString());
intent.putExtra("RentPay_input", RentPay_input.getText().toString());
intent.putExtra("ELimit_input", ELimit_input.getText().toString());
intent.putExtra("ELowPrice_input", ELowPrice_input.getText().toString());
intent.putExtra("EHiPrice_input", EHiPrice_input.getText().toString());
intent.putExtra("EPrevious_input", EPrevious_input.getText().toString());
intent.putExtra("ECurrent_input", ECurrent_input.getText().toString());
intent.putExtra("WPrice_input", WPrice_input.getText().toString());
intent.putExtra("WPrevious_input", WPrevious_input.getText().toString());
intent.putExtra("WCurrent_input", WCurrent_input.getText().toString());
intent.putExtra("Heating_input", Heating_input.getText().toString());
intent.putExtra("Debt_input", Debt_input.getText().toString());
startActivity(intent);
}
}
[/syntax]
Вот со String работает а с int нет.
Отличие в строке 42
[syntax=java]
package ua.pp.dreamer.rent.v1;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class CalcActivity extends Activity {
TextView Top_txt;
TextView ECalc;
TextView EWater;
TextView Heating;
TextView Debt;
TextView Calc_show;
TextView Calc_total;
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calc);
Top_txt = (TextView) findViewById(R.id.Top_txt);
ECalc = (TextView) findViewById(R.id.ECalc);
EWater = (TextView) findViewById(R.id.EWater);
Heating = (TextView) findViewById(R.id.Heating);
Debt = (TextView) findViewById(R.id.Debt);
Calc_show = (TextView) findViewById(R.id.Calc_show);
Calc_total = (TextView) findViewById(R.id.Calc_total);
Intent intent = getIntent();
String Mounth_input = intent.getStringExtra("Mounth_input");
String Year_input = intent.getStringExtra("Year_input");
String RentPay_input = intent.getStringExtra("RentPay_input");
String ELimit_input = intent.getStringExtra("ELimit_input");
String ELowPrice_input = intent.getStringExtra("ELowPrice_input");
String EHiPrice_input = intent.getStringExtra("EHiPrice_input");
String EPrevious_input = intent.getStringExtra("EPrevious_input");
String ECurrent_input = intent.getStringExtra("ECurrent_input");
String WPrice_input = intent.getStringExtra("WPrice_input");
int WPrevious_input = intent.getIntExtra("WPrevious_input", 0);
String WCurrent_input = intent.getStringExtra("WCurrent_input");
String Heating_input = intent.getStringExtra("Heating_input");
String Debt_input = intent.getStringExtra("Debt_input");
Top_txt.setText("Rent For " + Mounth_input + " " + Year_input + " ");
ECalc.setText("");
EWater.setText("");
Heating.setText(Heating_input);
Debt.setText(Debt_input);
Calc_show.setText("");
Calc_total.setText(WPrevious_input);
}
}
[/syntax]
Данный вопрос уже неоднократно звучал в этой ветке, но я чего-то недопонял...
У меня не получается передать int из одного activity в другой.
[syntax=java]
package ua.pp.dreamer.rent.v1;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends ActionBarActivity implements OnClickListener {
EditText Mounth_input;
EditText Year_input;
EditText RentPay_input;
EditText ELimit_input;
EditText ELowPrice_input;
EditText EHiPrice_input;
EditText EPrevious_input;
EditText ECurrent_input;
EditText WPrice_input;
EditText WPrevious_input;
EditText WCurrent_input;
EditText Heating_input;
EditText Debt_input;
Button button_calc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Mounth_input = (EditText) findViewById(R.id.Mounth_input);
Year_input = (EditText) findViewById(R.id.Year_input);
RentPay_input = (EditText) findViewById(R.id.RentPay_input);
ELimit_input = (EditText) findViewById(R.id.ELimit_input);
ELowPrice_input = (EditText) findViewById(R.id.ELowPrice_input);
EHiPrice_input = (EditText) findViewById(R.id.EHiPrice_input);
EPrevious_input = (EditText) findViewById(R.id.EPrevious_input);
ECurrent_input = (EditText) findViewById(R.id.ECurrent_input);
WPrice_input = (EditText) findViewById(R.id.WPrice_input);
WPrevious_input = (EditText) findViewById(R.id.WPrevious_input);
WCurrent_input = (EditText) findViewById(R.id.WCurrent_input);
Heating_input = (EditText) findViewById(R.id.Heating_input);
Debt_input = (EditText) findViewById(R.id.Debt_input);
button_calc = (Button) findViewById(R.id.button_calc);
button_calc.setOnClickListener(this);
}
@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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent (this, CalcActivity.class);
intent.putExtra("Mounth_input", Mounth_input.getText().toString());
intent.putExtra("Year_input", Year_input.getText().toString());
intent.putExtra("RentPay_input", RentPay_input.getText().toString());
intent.putExtra("ELimit_input", ELimit_input.getText().toString());
intent.putExtra("ELowPrice_input", ELowPrice_input.getText().toString());
intent.putExtra("EHiPrice_input", EHiPrice_input.getText().toString());
intent.putExtra("EPrevious_input", EPrevious_input.getText().toString());
intent.putExtra("ECurrent_input", ECurrent_input.getText().toString());
intent.putExtra("WPrice_input", WPrice_input.getText().toString());
intent.putExtra("WPrevious_input", WPrevious_input.getText().toString());
intent.putExtra("WCurrent_input", WCurrent_input.getText().toString());
intent.putExtra("Heating_input", Heating_input.getText().toString());
intent.putExtra("Debt_input", Debt_input.getText().toString());
startActivity(intent);
}
}
[/syntax]
Вот со String работает а с int нет.
Отличие в строке 42
[syntax=java]
package ua.pp.dreamer.rent.v1;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class CalcActivity extends Activity {
TextView Top_txt;
TextView ECalc;
TextView EWater;
TextView Heating;
TextView Debt;
TextView Calc_show;
TextView Calc_total;
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calc);
Top_txt = (TextView) findViewById(R.id.Top_txt);
ECalc = (TextView) findViewById(R.id.ECalc);
EWater = (TextView) findViewById(R.id.EWater);
Heating = (TextView) findViewById(R.id.Heating);
Debt = (TextView) findViewById(R.id.Debt);
Calc_show = (TextView) findViewById(R.id.Calc_show);
Calc_total = (TextView) findViewById(R.id.Calc_total);
Intent intent = getIntent();
String Mounth_input = intent.getStringExtra("Mounth_input");
String Year_input = intent.getStringExtra("Year_input");
String RentPay_input = intent.getStringExtra("RentPay_input");
String ELimit_input = intent.getStringExtra("ELimit_input");
String ELowPrice_input = intent.getStringExtra("ELowPrice_input");
String EHiPrice_input = intent.getStringExtra("EHiPrice_input");
String EPrevious_input = intent.getStringExtra("EPrevious_input");
String ECurrent_input = intent.getStringExtra("ECurrent_input");
String WPrice_input = intent.getStringExtra("WPrice_input");
int WPrevious_input = intent.getIntExtra("WPrevious_input", 0);
String WCurrent_input = intent.getStringExtra("WCurrent_input");
String Heating_input = intent.getStringExtra("Heating_input");
String Debt_input = intent.getStringExtra("Debt_input");
Top_txt.setText("Rent For " + Mounth_input + " " + Year_input + " ");
ECalc.setText("");
EWater.setText("");
Heating.setText(Heating_input);
Debt.setText(Debt_input);
Calc_show.setText("");
Calc_total.setText(WPrevious_input);
}
}
[/syntax]
Re: Урок 28. Extras - передаем данные с помощью Intent
Судя по коду вы отправляете String и пытаетесь получить int. Так ничего не получится.lazyroot писал(а):Добрый день.
...
Подсказка: http://developer.android.com/intl/ru/re ... ng.String)
Re: Урок 28. Extras - передаем данные с помощью Intent
Я понимаю что проблема в этой строке
[syntax=java]intent.putExtra("WPrevious_input", WPrevious_input.getText().toString());[/syntax]
При изменении на это - выдает ошибку
[syntax=java]intent.parseInt("WPrevious_input", WPrevious_input.getText().toString());[/syntax]
Делаю так:
[syntax=java]intent.parseInt("WPrevious_input", WPrevious_input);[/syntax]
По прежнему ошибка.
Eclipse предлагает так:
[syntax=java]((Object) intent).parseInt("WPrevious_input", WPrevious_input);[/syntax]
но не понимаю что прописать вместо "Object".
[syntax=java]intent.putExtra("WPrevious_input", WPrevious_input.getText().toString());[/syntax]
При изменении на это - выдает ошибку
[syntax=java]intent.parseInt("WPrevious_input", WPrevious_input.getText().toString());[/syntax]
Делаю так:
[syntax=java]intent.parseInt("WPrevious_input", WPrevious_input);[/syntax]
По прежнему ошибка.
Eclipse предлагает так:
[syntax=java]((Object) intent).parseInt("WPrevious_input", WPrevious_input);[/syntax]
но не понимаю что прописать вместо "Object".
Re: Урок 28. Extras - передаем данные с помощью Intent
По-вашему, Intent и Integer это одно и тоже?
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 28. Extras - передаем данные с помощью Intent
Нет.doter.ua писал(а):По-вашему, Intent и Integer это одно и тоже?
Я понимаю что здесь все с многолетним опытом программирования и всем очевидна моя ошибка, но я не имею опыта, а только начинаю и прошу помощи.
Не понимаю я на что Вы хотите меня направить.
Если вопрос слишком глуп - так и скажите и я попытаю счастье на других форумах.
Спасибо за понимание.
Re: Урок 28. Extras - передаем данные с помощью Intent
Сравни:lazyroot писал(а):Нет.doter.ua писал(а):По-вашему, Intent и Integer это одно и тоже?
Я понимаю что здесь все с многолетним опытом программирования и всем очевидна моя ошибка, но я не имею опыта, а только начинаю и прошу помощи.
Не понимаю я на что Вы хотите меня направить.
Если вопрос слишком глуп - так и скажите и я попытаю счастье на других форумах.
Спасибо за понимание.
intent.parseInt("WPrevious_input", WPrevious_input);
и
Integer.parseInt("123", 10); //( число в строке, основание системы счисления (десятичная двоичная и т.д.) )
Integer - с англ. целое число.
З.Ы. второй параметр по дефолту итак 10
int myNum = Integer.parseInt("123"); // myNum = 123
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 28. Extras - передаем данные с помощью Intent
Получающий activity получает в таком виде? Я правильно понял?
[syntax=java]int WPrevious_input = Integer.parseInt("WPrevious_input", 10);[/syntax]
А в передающем мы должны что-то менять? Я правильно понял, передаем мы строку а не целое число а вытянуть пытаемся целое число?
[syntax=java]intent.putExtra("WPrevious_input", WPrevious_input.getText().toString());[/syntax]
По идее мы же и передать и вытянуть должны один тип данных...
[syntax=java]int WPrevious_input = Integer.parseInt("WPrevious_input", 10);[/syntax]
А в передающем мы должны что-то менять? Я правильно понял, передаем мы строку а не целое число а вытянуть пытаемся целое число?
[syntax=java]intent.putExtra("WPrevious_input", WPrevious_input.getText().toString());[/syntax]
По идее мы же и передать и вытянуть должны один тип данных...
Re: Урок 28. Extras - передаем данные с помощью Intent
Почему бы не класть в интент число? сразу на месте распарсить его.
отправляющий:
Получающий:
ЗЫ проверки интента на null и прочее пропустил для простоты примера.
отправляющий:
Код: Выделить всё
int num = Integer.parseInt( WPrevious_input.getText().toString() );
intent.putExtra("myKey", num );
Код: Выделить всё
int defaultValue = 0;
int num = getIntent().getExtras().getInt( "myKey", defaultValue );
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 28. Extras - передаем данные с помощью Intent
Битый час бьюсь и не могу понять в чем же проблема...
Упростил программу до невозможности...
Выкладываю все, может кто-то что-то заметит...
activity_main.xml
[syntax=java]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center_horizontal" >
<TextView
android:id="@+id/txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pype int here" />
<EditText
android:id="@+id/input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:text="3"
android:gravity="center_horizontal" >
<requestFocus />
</EditText>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/calc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Calculate" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
[/syntax]
activity_calc.xml
[syntax=java]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/Top_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Output "
android:gravity="center_horizontal"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/Calc_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text=""
android:gravity="center_horizontal"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
[/syntax]
MainActivity.class
[syntax=java]
package com.example.int_test;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends ActionBarActivity implements OnClickListener {
EditText input_int;
Button button_calc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
input_int = (EditText) findViewById(R.id.input);
button_calc = (Button) findViewById(R.id.calc);
button_calc.setOnClickListener(this);
}
@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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent (this, CalcActivity.class);
int num = Integer.parseInt( input_int.getText().toString() );
intent.putExtra("myKey", num );
startActivity(intent);
}
}
[/syntax]
CalcActivity.class
[syntax=java]
package com.example.int_test;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class CalcActivity extends Activity {
TextView Top_txt;
TextView Calc_show;
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calc);
Top_txt = (TextView) findViewById(R.id.Top_txt);
Calc_show = (TextView) findViewById(R.id.Calc_show);
int defaultValue = 0;
int num = getIntent().getExtras().getInt( "myKey", defaultValue );
Calc_show.setText(num);
}
}
[/syntax]
Упростил программу до невозможности...
Выкладываю все, может кто-то что-то заметит...
activity_main.xml
[syntax=java]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center_horizontal" >
<TextView
android:id="@+id/txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pype int here" />
<EditText
android:id="@+id/input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:text="3"
android:gravity="center_horizontal" >
<requestFocus />
</EditText>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/calc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Calculate" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
[/syntax]
activity_calc.xml
[syntax=java]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/Top_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Output "
android:gravity="center_horizontal"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/Calc_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text=""
android:gravity="center_horizontal"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
[/syntax]
MainActivity.class
[syntax=java]
package com.example.int_test;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends ActionBarActivity implements OnClickListener {
EditText input_int;
Button button_calc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
input_int = (EditText) findViewById(R.id.input);
button_calc = (Button) findViewById(R.id.calc);
button_calc.setOnClickListener(this);
}
@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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent (this, CalcActivity.class);
int num = Integer.parseInt( input_int.getText().toString() );
intent.putExtra("myKey", num );
startActivity(intent);
}
}
[/syntax]
CalcActivity.class
[syntax=java]
package com.example.int_test;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class CalcActivity extends Activity {
TextView Top_txt;
TextView Calc_show;
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calc);
Top_txt = (TextView) findViewById(R.id.Top_txt);
Calc_show = (TextView) findViewById(R.id.Calc_show);
int defaultValue = 0;
int num = getIntent().getExtras().getInt( "myKey", defaultValue );
Calc_show.setText(num);
}
}
[/syntax]
Re: Урок 28. Extras - передаем данные с помощью Intent
Хз-хз.
Последний раз редактировалось Sasha2dx 14 июл 2015, 09:06, всего редактировалось 1 раз.
Re: Урок 28. Extras - передаем данные с помощью Intent
[syntax=java]Calc_show.setText(num + "");[/syntax]lazyroot писал(а):Битый час бьюсь и не могу понять в чем же проблема...
Re: Урок 28. Extras - передаем данные с помощью Intent
Ну то, что это работает я уже убедился) Спасибо Всем что помогли. Но почему я не могу просто вывести число, зачем добавлять + "" я чуть-чуть не понял...
В чем будут отличия?
Вдогонку родился еще один вопрос, а как передать float или double?klblk писал(а):[syntax=java]Calc_show.setText(num + "");[/syntax]
В чем будут отличия?
Re: Урок 28. Extras - передаем данные с помощью Intent
Потому что есть 2 метода setText(). Один на вход принимает строку (String), другой на вход принимает id ресурса (int, например: R.string.mystring, где mystring строка в ресурсах xml). Вы передавали в метод свой num, который int, и система пытается найти ресурс с таким id, и естественно не находит и вылетает с ошибкой.lazyroot писал(а):Ну то, что это работает я уже убедился) Спасибо Всем что помогли. Но почему я не могу просто вывести число, зачем добавлять + "" я чуть-чуть не понял...
num + "" - простейший способ преобразовать число в строку. С float и double можно поступать также, правда я не помню сколько он в таком случае выведет знаков после запятой, для них есть более деликатные способы вывода.