Как из списка вызвать второй активити?

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
do_cent
Сообщения: 15
Зарегистрирован: 08 фев 2012, 13:02

Как из списка вызвать второй активити?

Сообщение do_cent » 04 апр 2012, 14:29

Всем привет! я создаю прозрачный список ListView и хочу что бы при нажатии кнопку "петя" открывался второй активити:)при нажатии "федя" третий активити:)Хочу спросить как привязывать к пунктам списка активити:) И какой метод нужен если текст в лоут файле большой, и выходит за границы, как сделать чтобы он прокручивался:)Заранее Спаибо!

Аватара пользователя
Dedg
Сообщения: 10
Зарегистрирован: 01 апр 2012, 16:56
Контактная информация:

Re: Как из списка вызвать второй активити?

Сообщение Dedg » 04 апр 2012, 16:46

do_cent писал(а):Всем привет! я создаю прозрачный список ListView и хочу что бы при нажатии кнопку "петя" открывался второй активити:)при нажатии "федя" третий активити:)Хочу спросить как привязывать к пунктам списка активити:) И какой метод нужен если текст в лоут файле большой, и выходит за границы, как сделать чтобы он прокручивался:)Заранее Спаибо!
посмотри уроки 22 и 44 там подробно описано

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

Re: Как из списка вызвать второй активити?

Сообщение KamiSempai » 04 апр 2012, 20:46

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

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Как из списка вызвать второй активити?

Сообщение andev » 04 апр 2012, 21:59

ListView же, вроде, сам перематывается, когда имеет размер больше экрана?

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

Re: Как из списка вызвать второй активити?

Сообщение KamiSempai » 04 апр 2012, 22:17

andev писал(а):ListView же, вроде, сам перематывается, когда имеет размер больше экрана?
На сколько я понял, он имеет в виду "лоут" на котором будет информация по выбранному человеку, а не экран со списком.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

do_cent
Сообщения: 15
Зарегистрирован: 08 фев 2012, 13:02

Re: Как из списка вызвать второй активити?

Сообщение do_cent » 05 апр 2012, 10:50

Конечно спасибо! Я как раз по 44 уроку и делаю. Но меня как раз интересует куда надо вписать id второго активити:) чтобы при нажатиии на пункт не лог всплывал а второй активити я всё создал просто не могу к "пети" привязать второй активити:)

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Как из списка вызвать второй активити?

Сообщение andev » 05 апр 2012, 11:00

ну элементарно же

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

private ArrayAdapter<String> adapter;

lvMain.setOnItemSelectedListener(new OnItemSelectedListener() {
      public void onItemSelected(AdapterView<?> parent, View view, position, long id) {
            	String man = adapter.getItem(position);
		if (man.equalsIgnoreCase("Петя")) {
			Intent myIntent = new Intent(this, ActivityPetya.class);
			startActivity(myIntent);		
		} else if (man.equalsIgnoreCase("Вася")) {
			Intent myIntent = new Intent(this, ActivityVasya.class);
			startActivity(myIntent);		
		} // и так далее
      }

      public void onNothingSelected(AdapterView<?> parent) {

      }
    });

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Как из списка вызвать второй активити?

Сообщение damager82 » 05 апр 2012, 11:04

do_cent писал(а):Я как раз по 44 уроку и делаю. Но меня как раз интересует куда надо вписать id второго активити:) чтобы при нажатиии на пункт не лог всплывал а второй активити я всё создал просто не могу к "пети" привязать второй активити:)
Есть обработчик OnItemClickListener (урок 44). В него вам нужно вставить вызов другого Activity (урок 21). На каком именно моменте возникает трудность?

UPD:
andev уже все расписал :)
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

do_cent
Сообщения: 15
Зарегистрирован: 08 фев 2012, 13:02

Re: Как из списка вызвать второй активити?

Сообщение do_cent » 06 апр 2012, 14:30

Вот так получилось но там где то ошибка не пойму где

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

public class ProbaActivity extends Activity {


  ListView lvMain;
  


  

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

    lvMain = (ListView) findViewById(R.id.lvMain);

    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
        this, R.array.names, android.R.layout.simple_list_item_1);
    lvMain.setAdapter(adapter);

    lvMain.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {
    	  String man = adapter.getItem(position);

          if (man.equalsIgnoreCase("Петр")) {

                Intent myIntent = new Intent(this, Pervstix.class);

                  startActivity(myIntent);
    }

    lvMain.setOnItemSelectedListener(new OnItemSelectedListener() {
      public void onItemSelected(AdapterView<?> parent, View view,
          int position, long id) {
      }

      public void onNothingSelected(AdapterView<?> parent) {
      }
 
      public void onScroll(AbsListView view, int firstVisibleItem,
          int visibleItemCount, int totalItemCount) {
      }
   }
       
И еще хотел спросить С текстом всё получилось но только у меня там стих и как мне его сделать чтобы было ровно в колоночку и по четверостишиям а то ScrollView его сплошным тексто делает как рассказ:) Делал по этому посту только без горизонтальной прокрутки http://developer.alexanderklimov.ru/and ... llview.php
Заранее Спасибо!
Последний раз редактировалось do_cent 06 апр 2012, 15:00, всего редактировалось 2 раза.

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

Re: Как из списка вызвать второй активити?

Сообщение KamiSempai » 06 апр 2012, 14:47

Ошибка в onScroll. Это метод из другого интерфейса. Интерфейс называется OnScrollListener.

Я догадываюсь, что Вы собираетесь сделать и это НЕ правильно. Если по нажатию на строку показывается совершенно одинаковые экраны с разными текстами, стоит сделать одну Activity которая заполняется нужным содержимым сама. Для это го нужно передать в вызываемую активность информацию о выбранном пункте:

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

    lvMain.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
          Intent myIntent = new Intent(this, Pervstix.class);
          myIntent.putExtra("Name", adapter.getItem(position));
          startActivity(myIntent);
    }
А в onCreate класса Pervstix заполнить текстовые поля в зависимости от выбранного пункта.
Как пользоваться putExtra рассказывается в 28 уроке.

Переносы строк делаются следующим образом: "Первая строка \n Вторая строка".
Я думаю, мне не стоит напоминать, что все тексты лучше держать в strings.xml

PS: OnItemSelectedListener сдесь совершенно лишний, лучше его убрать.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

do_cent
Сообщения: 15
Зарегистрирован: 08 фев 2012, 13:02

Re: Как из списка вызвать второй активити?

Сообщение do_cent » 09 апр 2012, 10:34

нет там не совершенно одинаковые файлы там к разному стиху разная картинка:) если можно как ты предложил в одном активити еще и картинку фона поменять тогда это будет лучше, ну я имею ввиду при нажатии на пункт :):):) я поэтому и создаю прозрачный список чтобы на фон поставить фотку и при открытии у каждого пункта своя фотка и свой текст:):):):) а со стрингом попробую :):):):)
Спасибо!

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

Re: Как из списка вызвать второй активити?

Сообщение KamiSempai » 09 апр 2012, 12:23

С картинками можно поступить так-же как и с текстом.

На крайний случай, если внешний вид существенно различается а в функционале совершенно нет разницы, можно передавать разные слои в setContentView.
Если "Петя" то setContentView(R.layout.petya), если "Федя" setContentView(R.layout.fedya).
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

do_cent
Сообщения: 15
Зарегистрирован: 08 фев 2012, 13:02

Re: Как из списка вызвать второй активити?

Сообщение do_cent » 09 апр 2012, 15:31

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

package ru.doc.project;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ProbaActivity extends Activity {

  final String LOG_TAG = "myLogs";

  ListView lvMain;
 
  /** Called when the activity is first created. */
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    lvMain = (ListView) findViewById(R.id.lvMain);


    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
        this, R.array.names, android.R.layout.simple_list_item_1);
    lvMain.setAdapter(adapter);

    lvMain.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {
    	  Intent myIntent = new Intent(this, Pervstix.class);

          myIntent.putExtra("Петр", adapter.getItem(position));

          startActivity(myIntent);
      }

      public void onNothingSelected(AdapterView<?> parent) {
      }
    });

  }
}
   

что то всё равно не получается:)Может у меня ошибка в ДНК:):):):):)подчеркивает adapter в строке ("Петр", adapter.getItem(position)); всю new Intent(this, Pervstix.class); и array в строке R.array.names,

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

Re: Как из списка вызвать второй активити?

Сообщение KamiSempai » 09 апр 2012, 16:50

Даю универсальный совет (работает в 90% случаев). Нужно навести мышку на подчеркнутое слово и посмотреть, что предлагает Эклипс.
Итак:
1) adapter нужно объявить как final. (final ArrayAdapter<CharSequence> adapter = ... и так далее). Если интересно, что такое final и с чем его едят тыкай СЮДА.
2) this нужно заменить на getApplicationContext(). this - это ссылка на объект в котором выполняется код, а в данном случае это OnItemClickListener и он не является подклассом Context, который должен быть указан первым параметром в конструкторе Intent. Если не понятно, добро пожаловать в урок 22, там все ясно объяснено.
3) Возможно не правильно был объявлен массив.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

do_cent
Сообщения: 15
Зарегистрирован: 08 фев 2012, 13:02

Re: Как из списка вызвать второй активити?

Сообщение do_cent » 10 апр 2012, 12:11

Получилось! Всем спасибо! Особенно KamiSempai за терпение:):):):)

PS. А с array я просто из strings файла удалил имена и не заметил:):):):):):):)
PSS. Почему то акетивити не привязывается именно к "пети", на любой пункт нажимаешь он на любом пункте вытаскивает вторую активити(((( Чего делать?
PSSS.И еще хотел спросить что будет если я вместо .png фоток буду заливать .jpg и еще один вопрос ка сделать чтобы он нормально показывал фотки не растягивал по экрану? Заранее Спасибо!

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Как из списка вызвать второй активити?

Сообщение andev » 11 апр 2012, 01:34

do_cent писал(а):PSS. Почему то акетивити не привязывается именно к "пети", на любой пункт нажимаешь он на любом пункте вытаскивает вторую активити(((( Чего делать?
я думаю самое оптимальное - выложить архив с тем, что уже написано, вам быстро дадут ответ
do_cent писал(а): PSSS.И еще хотел спросить что будет если я вместо .png фоток буду заливать .jpg
Нормально будет, хотя лучше png, просто разрешение уменьшите до необходимого значения, размеры png и jpg почти сравняются, учитывая, что в png нет потери качества и можно использовать 9path
do_cent писал(а): и еще один вопрос ка сделать чтобы он нормально показывал фотки не растягивал по экрану? Заранее Спасибо!
поэкспериментируйте с атрибутами ImageView width и height, а также с атрибутом ImageView android:scaleType

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

Re: Как из списка вызвать второй активити?

Сообщение KamiSempai » 11 апр 2012, 07:33

do_cent писал(а):PSS. Почему то акетивити не привязывается именно к "пети", на любой пункт нажимаешь он на любом пункте вытаскивает вторую активити(((( Чего делать?
Естественно! Так и должно быть. Я же уже говорил, что лучше вызвать 1 активити и заполнить ее стихами в зависимости от переданных данных.
И правильно писать не myIntent.putExtra("Петр", adapter.getItem(position)); а myIntent.putExtra("Name", adapter.getItem(position));
Имя человека находится в adapter.getItem(position), а "Name" это ключ, по которому мы будем доставать это имя из Extra во втором активити.

Перечитайте урок 28. Вы не правильно поняли как использовать Intent.

Исправил номер урока с 22 на 28.
Последний раз редактировалось KamiSempai 11 апр 2012, 12:24, всего редактировалось 1 раз.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

do_cent
Сообщения: 15
Зарегистрирован: 08 фев 2012, 13:02

Re: Как из списка вызвать второй активити?

Сообщение do_cent » 11 апр 2012, 09:45

Получилось по способу andev всем спасибо!

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Как из списка вызвать второй активити?

Сообщение andev » 11 апр 2012, 11:37

Я так понимаю по моей подсказке получилось размещение View'ов на layout'e.
По поводу передачи данных между активити и заполнения второго активити информацией настоятельно рекомендую прислушаться к совету KamiSempai, т.к. создавать под каждый элемент списка свою активити крайне нерационально.

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

Re: Как из списка вызвать второй активити?

Сообщение KamiSempai » 11 апр 2012, 12:45

Не будем попрекать человека, ведь он только учится. Нам остается надеяться на то, что в будущем он все-таки научится правильному программированию, либо нам ни когда не придется копаться в его коде :)
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Ответить