Урок 21. Создание и вызов Activity

Обсуждение уроков
Аватара пользователя
Don77
Сообщения: 13
Зарегистрирован: 02 июл 2014, 00:21

Re: Урок 21. Создание и вызов Activity

Сообщение Don77 » 13 июл 2014, 18:03

allexan писал(а):Все делал по уроку:
..............................

Здесь ошибок нет.
В манифесте все прописано, однако

OnClickListener oclNum = new OnClickListener() {

public void onClick(View v) {
Intent intent = new Intent(this,ShowRes.class);

}
};
Intent intent = new Intent(this,ShowRes.class);
В первом параметре объекта Intent, вы указываете текущий объект (this) а это - oclNum, то есть первым параметром вы передаете обработчик нажатий, на самом деле надо указать текущий объект активити - ShowRes.this

isachenko
Сообщения: 47
Зарегистрирован: 30 июл 2014, 21:43

Re: Урок 21. Создание и вызов Activity

Сообщение isachenko » 27 сен 2014, 21:27

Подскажите пожалуйста, если я хочу, чтобы несколько кнопок одного активити1 вызывали одно и то же другое активити2, как это корректно прописать в onClick?
Спасибо!
Спасибо за уроки!

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 21. Создание и вызов Activity

Сообщение Foenix » 27 сен 2014, 23:05

http://habrahabr.ru/post/114580/
обработку сделай как тут в самом первом примере. Соответственно в onCreate() дописывай несколько кнопок с обращением к одному методу.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Nialon
Сообщения: 22
Зарегистрирован: 12 ноя 2013, 19:19

Re: Урок 21. Создание и вызов Activity

Сообщение Nialon » 03 окт 2014, 10:22

Привет всем. Уперся в **** реализацию Activity.
Как показать окно не используя интент? Ничего кроме startActivity не нашел.
Это нужно для сохранения данных внутри класса перед запуском.
Сюда входит запуск Activity из самого себя.
Естесствено Intent.extra ... put.. Парсе.. Сериализацию не предлагать. Это кошмар.

ВОт код для ясности:

Код: Выделить всё

.....
import android.app.Activity;
import java.util.Date;

public class AddEditRad extends Activity {

    interface ModeView {
        public int ALERT = 1;
        public int LAYOUT = 2;
    }

    // Приватные переменные этого класса
    private String LOG_TAG = "myLogs";
    private Context vContext;
    private DatabaseManager vDb;
    private mySCAdapter vAdapter;
    private Integer vMode;
    private Integer vRowID;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // ОДин сборщик рутового окна
        setContentView(BuildRoot(vContext, vDb, vAdapter, vRowID));
    }

    protected void Create(Context context, Integer Mode, DatabaseManager db, mySCAdapter Adapter, Integer rowID) {

        // Передаем все значения в приват класса
        vContext = context;
        vMode = Mode;
        vDb = db;
        vAdapter = Adapter;
        vRowID = rowID;

        switch (Mode) { // Смотрим тип запуска

            case ModeView.ALERT:

                AlertDialog.Builder ad = new AlertDialog.Builder(context);
                // ОДин сборщик рутового окна
                ad.setView(BuildRoot(context, db, Adapter, rowID));
                ad.show();

            break;

            case ModeView.LAYOUT:

               // ЗЕСЬ ТУПИК ... приватные данные зануляются
               // Эта зараза берет имя класса, а не текущий экземпляр
               startActivity(new Intent(this, AddEditRad.class));

            break;
        }

    }
Ну и извне запускаю так:

Код: Выделить всё

new AddEditRad().Create(this, 2, dm, scAdapter, -1); 
В алертах такой безобразии нет. ТАм можно расширять конструктор.
Может есть способ убрать бордюр т.е растянуть на все окно?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 21. Создание и вызов Activity

Сообщение klblk » 03 окт 2014, 10:57

Nialon писал(а):Естесствено Intent.extra ... put.. Парсе.. Сериализацию не предлагать. Это кошмар.
Вот все из перечисленного нормально.
Nialon писал(а):Ну и извне запускаю так:

Код: Выделить всё

new AddEditRad().Create(this, 2, dm, scAdapter, -1); 
А вот это кошмар.

А теперь по порядку что нужно и зачем, из текста выше мало что уловилось (окна какие-то, бордюры). Для передачи данных в Activity используется Intent и это нормально и чем он вам не угодил совершенно не понятно.

Аватара пользователя
Nialon
Сообщения: 22
Зарегистрирован: 12 ноя 2013, 19:19

Re: Урок 21. Создание и вызов Activity

Сообщение Nialon » 03 окт 2014, 13:31

Что тут кошмарного. Отдельная процедура в классе для передачи параметров и далее.
Только вот запустить этот же активити изнутри класса не могу.. Это первый вопрос.

Основная Задача такая, запустить активити и передать, к примеру, следующее:
Context , DatabaseManager , SimpleCursorAdapter , 2 х Integer .. Ну и другое если приспичит.
Предложите рабочий вариант кода, я поменяю мнение. Не хочу думать над запаковкой\распаковкой данных.

Про бордюры забудьте .. Я поднял как минимум 3 разные темы...

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 21. Создание и вызов Activity

Сообщение klblk » 03 окт 2014, 14:01

Nialon писал(а):Что тут кошмарного. Отдельная процедура в классе для передачи параметров и далее.
Только вот запустить этот же активити изнутри класса не могу.. Это первый вопрос.

Основная Задача такая, запустить активити и передать, к примеру, следующее:
Context , DatabaseManager , SimpleCursorAdapter , 2 х Integer .. Ну и другое если приспичит.
Предложите рабочий вариант кода, я поменяю мнение. Не хочу думать над запаковкой\распаковкой данных.

Про бордюры забудьте .. Я поднял как минимум 3 разные темы...
Все Activity создаются системой самостоятельно, и "new Activity" в коде не имеет никакого логического объяснения.

0) Зачем вызывать Activity из самой себя?
1) передавать в Activity Context - зачем? Activity сама себе Context, ну а если нужно больше всегда есть getApplicationContext()
2) передавать в Activity DatabaseManager - зачем? что мешает создать новый?
3) передавать в Activity SimpleCursorAdapter - зачем? что мешает создать новый?
4) ну с Integer проблем быть не должно.

по п.2-3 могу ошибаться, т.к. серьезно с БД не работал, но вероятно есть какая-то архитектурная ошибка (вероятно нужно использовать какой-нить ContentProvider).

Аватара пользователя
Nialon
Сообщения: 22
Зарегистрирован: 12 ноя 2013, 19:19

Re: Урок 21. Создание и вызов Activity

Сообщение Nialon » 03 окт 2014, 15:20

Все данные еще в процессе сборки. Оптимизация тоже. Относится к 0, 1.
2, 3 - зачем создавать новое, когда есть активный текущий. У меня же не коллекция связей, а 1 экземпляр.
Это лишнее усложнение кода. В других языках можно было передать указатель и все. В джава его нет.
Если философия активити предполагает что она как отдельная программа (окно), которая запускается по интенту,
тогда выходит что в каждом новом окне 10 раз дублировать один и тот же код.. Это то что вы мне предложили.
Я тоже особо ничего не знаю про грамотную реализацию структуры, так что просто беру то что под рукой.
Если заниматься оптимизацией, то на данный момент выходит, мне нужно передать свой View в Activity.
Где-то вычитал о создании обертки вокруг Activity, чтобы не терять параметры, что-то никак не получается.

up: Пришлось немного почитать интенты. Пригодится. Закрываю вопрос.
Буду переписывать под модульность каждого в отдельности.

akuz
Сообщения: 1
Зарегистрирован: 23 ноя 2014, 15:41

Re: Урок 21. Создание и вызов Activity

Сообщение akuz » 23 ноя 2014, 16:07

А чем отличается запуск активити от просто если вызвать Layout файл, как я это сделал в 5 уроке. по нажатию кнопки на одном окне я вызвал другое окно методом setContentView(R.layout.screen2);

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 21. Создание и вызов Activity

Сообщение doter.ua » 23 ноя 2014, 17:36

akuz писал(а):А чем отличается запуск активити от просто если вызвать Layout файл, как я это сделал в 5 уроке. по нажатию кнопки на одном окне я вызвал другое окно методом setContentView(R.layout.screen2);
В разных лейаутах могут быть разные ID у элементов, и когда в коде Активити у тебя будет код где кнопка с ид = бтн1 все будет работать. При смене лейаута на другой, в котором кнопки с таким ИД вылетит ошибка. Вообще смена лейаутов реализована "фрагментами".
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

mixailanarxist
Сообщения: 17
Зарегистрирован: 15 ноя 2014, 23:26

Re: Урок 21. Создание и вызов Activity

Сообщение mixailanarxist » 14 дек 2014, 17:23

Такие вопросы появились:
1. А если элементов нужно больше, и они не влазят ни в горизонтальное расположение экрана, ни в вертикальное. Можно, конечно, перенести их на следующее Activity путем нажатия кнопки "Далее", но это не удобно. Как сделать, чтобы их можно было смотреть путем "листания", т.е. движением пальцев вверх-вниз (как обычно это и происходит в приложениях).
2. Как менять Activity не путем нажатия на кнопку, а путем движения пальца вправо-влево.

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 21. Создание и вызов Activity

Сообщение doter.ua » 14 дек 2014, 21:12

ScrollView как контейнер (например вместо LinearLayout или внутри него)
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

mixailanarxist
Сообщения: 17
Зарегистрирован: 15 ноя 2014, 23:26

Re: Урок 21. Создание и вызов Activity

Сообщение mixailanarxist » 15 дек 2014, 09:01

Спасибо, подсказали что есть такое дело как ViewPager в уроках. Будем разбираться.

Oyasi
Сообщения: 12
Зарегистрирован: 17 дек 2014, 20:31

Unfortunately, MyApp has stopped

Сообщение Oyasi » 17 дек 2014, 20:42

Всем привет, помогите пожалуйста разобраться в следующей проблеме:
По данному уроку делал такую конструкцию "MainActivity" содержит текст, переключатель и кнопку. Кнопка должна открыть AddActivity, в которой только Hello_world. Выполнил всё как написано в уроке, но создал класс как советуют на сайте гугл в официальном туторе, через соответствующую функцию в Android Studio т.к. она создаёт сразу и Активити и лайаут и прописывает всё в Манифесте. не суть... Программа не запускается! вообще!
Методом тыка смог определить, что проблема в следующих строчках:
[syntax=java]
button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);[/syntax]
AddActivity
[syntax=java]
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.MenuItem;


public class AddActivity extends ActionBarActivity {


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


@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();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}[/syntax]
MainActivity
[syntax=java]
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;



public class MainActivity extends Activity implements View.OnClickListener {
Button button;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
Intent intent = new Intent(this, AddActivity.class);
startActivity(intent);
break;
default:
break;
}
}
}[/syntax]
activity_add.xml
[syntax=java]<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.dima.studyj.AddActivity">

<TextView android:text="@string/hello_world" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>[/syntax]
activity_main.xml
[syntax=java]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
android:clickable="false">


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />

<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Switch"
android:id="@+id/switch1"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>[/syntax]
AndroidManifest
[syntax=java]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.dima.studyj" >

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.example.dima.studyj.AddActivity"
android:label="@string/title_activity_add"
android:parentActivityName="com.example.dima.studyj.MainActivity">
<meta-data android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.dima.studyj.MainActivity" />
</activity>
</application>
</manifest>
[/syntax]

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 21. Создание и вызов Activity

Сообщение doter.ua » 17 дек 2014, 21:07

Создавай активити так: ПКМ на папке, в которой нужно создать, выбираешь new, затем blank activity
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Oyasi
Сообщения: 12
Зарегистрирован: 17 дек 2014, 20:31

Re: Урок 21. Создание и вызов Activity

Сообщение Oyasi » 17 дек 2014, 21:08

doter.ua писал(а):Создавай активити так: ПКМ на папке, в которой нужно создать, выбираешь new, затем blank activity
так и сделал, не помогло

gefest
Сообщения: 2
Зарегистрирован: 26 янв 2015, 16:02

Re: Урок 21. Создание и вызов Activity

Сообщение gefest » 26 янв 2015, 16:05

Я видел в некоторых приложениях разные эффекты при смене activity. Подскажите, есть ли специальный параметр для этого?
Например, чтобы activity выезжало справа, а не появлялось из центра.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 21. Создание и вызов Activity

Сообщение KamiSempai » 26 янв 2015, 16:12

R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Mango
Сообщения: 4
Зарегистрирован: 09 фев 2015, 17:54

Re: Урок 21. Создание и вызов Activity

Сообщение Mango » 11 фев 2015, 02:21

Пишу в Android Studio. Создала Activity стандартным способом ...> new > blank Activity. В манифесте проверила все прописано.
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnSave:
saveText();
break;
Intent intent = new Intent(this, ActivityTwo.class);
startActivity(intent);
break;
default:
break;
}
}

Ругается на строку Intent intent = new Intent(this, ActivityTwo.class); (подчеркнута красным). Пишет unreachable statement. Сначала ругался на сам Intent, прописала вверху import android.content.Intent; появилась такая беда.
Подскажите пожалуйста, кто знает.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 21. Создание и вызов Activity

Сообщение klblk » 11 фев 2015, 07:29

0) Оформляйте код на форуме правильно.
1) один break определенно лишний, либо не хватает еще одного case.

Ответить