Урок 44. События в ListView

Обсуждение уроков
Аватара пользователя
appo
Сообщения: 1
Зарегистрирован: 13 дек 2014, 23:40

Re: Урок 44. События в ListView

Сообщение appo » 13 дек 2014, 23:45

как можно добавить subitem ?

AlexeyFedor
Сообщения: 31
Зарегистрирован: 03 сен 2013, 14:26

Re: Урок 44. События в ListView

Сообщение AlexeyFedor » 20 мар 2015, 17:25

К этому уроку можно написать код попроще. Обрабатывать через Активити, как событие нажатия на кнопку. По коду сразу все становится понятно, особенно для таких новичков как я. Работает авто подстановка.

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

public class MainActivity extends Activity  implements OnItemClickListener{
TextView mTextView ;
String[] contact={"aaa","bbb","ccc","ddd","eee","fff","ggg","hhh","qqq","rrr","sss"} ;
ListView lv;
final String LOG_TAG="myLog";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mTextView=(TextView) findViewById(R.id.textSelect);
        lv=(ListView) findViewById(R.id.list);
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,
        													  contact);
        lv.setAdapter(adapter);
        lv.setOnItemClickListener(this);
        
    }
	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
		// TODO Auto-generated method stub
		Log.d(LOG_TAG, "itemClick: position = " + position + ", id = "
        	            + id);
	}
}

i.lavrenov
Сообщения: 3
Зарегистрирован: 18 сен 2015, 10:39

Re: Урок 44. События в ListView

Сообщение i.lavrenov » 23 сен 2015, 15:51

MASK писал(а):
Serge писал(а):После этого урока возник вопрос по эмулятору.
ItemSelect у меня вызывается только при нажатии пробела, при этом позиционируется на строке, где был последний клик. Ни кнопки курсора, ни колесо мыши не работает.
Спасибо большое за это сообщение, а то я уже не знала как заставить работать этот OnItemSelectedListener. На эмуляторе теперь работает, а вот как его активировать на реальном девайсе - ума не приложу, там-то нет клавиатуры с пробелом :roll:
Если кто-то разобрался - прошу помощи, хотя подозреваю, что этот метод на самом деле оставлен в коде рудиментарно и в жизни не используется.
Буду рада любым ответам!
Добавьте эту информацию в урок, пожалуйста!

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

Re: Урок 44. События в ListView

Сообщение Foenix » 23 сен 2015, 16:27

листвью уже все, отжил
R.id.team

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

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

Re: Урок 44. События в ListView

Сообщение doter.ua » 23 сен 2015, 19:08

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

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

Re: Урок 44. События в ListView

Сообщение Foenix » 23 сен 2015, 22:35

doter.ua писал(а):
Foenix писал(а):листвью уже все, отжил
Кто пришел на замену?
а кто спрашивает? :mrgreen:
R.id.team

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

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

Re: Урок 44. События в ListView

Сообщение doter.ua » 23 сен 2015, 22:43

Foenix писал(а):
doter.ua писал(а):
Foenix писал(а):листвью уже все, отжил
Кто пришел на замену?
а кто спрашивает? :mrgreen:
я
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

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

Re: Урок 44. События в ListView

Сообщение Foenix » 23 сен 2015, 23:50

doter.ua писал(а):
Foenix писал(а):
doter.ua писал(а):
Foenix писал(а):листвью уже все, отжил
Кто пришел на замену?
а кто спрашивает? :mrgreen:
я
Изображение
R.id.team

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

kefir_mbis
Сообщения: 5
Зарегистрирован: 31 окт 2013, 21:35

Re: Урок 44. События в ListView

Сообщение kefir_mbis » 24 ноя 2015, 12:49

Привет! Друзья, разъясните один момент.

Есть список listview, по нажатию на элемент списка, требуется передать адрес интернет-ресурса в другую активность с webview.

Как реализовать? Пока сделано ужасно грубо, каждый элемент списка создает новую активность, в ней webview + url
Позиций в списке около 300 :(

Много гуглил на эту тему, и как я понял, передачей строки должен заниматься тот же intent с передаваемой строкой в слушателе OnItemClickListener

Но примеров даже похожей ситуации не нашел. Очень прошу, набросайте на коленке (или пните в нужную сторону), какой параметр с адресом должна отдавать первая активность, и как вторая должна принять на входе.

Пока сделано так:

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

public class StartActivity extends Activity  {


/** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    
   
    setContentView(R.layout.activity_start);
 // получаем экземпляр элемента ListView
    ListView listView = (ListView)findViewById(R.id.listView1);

    // определяем массив типа String
    String[] names = getResources().getStringArray(R.array.main_menu);

//// используем адаптер данных
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,	android.R.layout.simple_list_item_1, names);

    listView.setAdapter(adapter);
    
 // Обработка события на клик по элементу списка
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    	@Override
    	public void onItemClick(AdapterView<?> parent, View itemClicked, int position,
    	long id) {
    	if (position==0){
    	Intent intent = new Intent(StartActivity.this, OneActivity.class);
    	startActivity(intent);
    	}
    	else if (position==1){
    		Intent intent = new Intent(StartActivity.this, TwoActivity.class);
        	startActivity(intent);
    	}
    	else if (position==2){
    		Toast.makeText(getApplicationContext(), "Зачем нажали:" +
                      ", id = " + id + ", " + parent.getAdapter().getItem(position),
                    Toast.LENGTH_SHORT).show();
    	}
    }});
    
   
    

Realist
Сообщения: 134
Зарегистрирован: 08 фев 2014, 18:15

Re: Урок 44. События в ListView

Сообщение Realist » 24 ноя 2015, 17:32

kefir_mbis писал(а):Привет! Друзья, разъясните один момент.

Есть список listview, по нажатию на элемент списка, требуется передать адрес интернет-ресурса в другую активность с webview.

Как реализовать? Пока сделано ужасно грубо, каждый элемент списка создает новую активность, в ней webview + url
Позиций в списке около 300 :(

Много гуглил на эту тему, и как я понял, передачей строки должен заниматься тот же intent с передаваемой строкой в слушателе OnItemClickListener

Но примеров даже похожей ситуации не нашел. Очень прошу, набросайте на коленке (или пните в нужную сторону), какой параметр с адресом должна отдавать первая активность, и как вторая должна принять на входе.

Пока сделано так:

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

public class StartActivity extends Activity  {


/** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    
   
    setContentView(R.layout.activity_start);
 // получаем экземпляр элемента ListView
    ListView listView = (ListView)findViewById(R.id.listView1);

    // определяем массив типа String
    String[] names = getResources().getStringArray(R.array.main_menu);

//// используем адаптер данных
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,	android.R.layout.simple_list_item_1, names);

    listView.setAdapter(adapter);
    
 // Обработка события на клик по элементу списка
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    	@Override
    	public void onItemClick(AdapterView<?> parent, View itemClicked, int position,
    	long id) {
    	if (position==0){
    	Intent intent = new Intent(StartActivity.this, OneActivity.class);
    	startActivity(intent);
    	}
    	else if (position==1){
    		Intent intent = new Intent(StartActivity.this, TwoActivity.class);
        	startActivity(intent);
    	}
    	else if (position==2){
    		Toast.makeText(getApplicationContext(), "Зачем нажали:" +
                      ", id = " + id + ", " + parent.getAdapter().getItem(position),
                    Toast.LENGTH_SHORT).show();
    	}
    }});
    
   
    
В первой активности сделайте список с url. В onItemClick :

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

Intent intent = new Intent(StartActivity.this, UrlActivity.class);
intent.putExtra("url", vashSpisok.get(position));
startActivity(intent);
Во второй активности в onCreate:

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

String url = getIntent().getStringExtra("url");
Урок 28 почитайте.

kefir_mbis
Сообщения: 5
Зарегистрирован: 31 окт 2013, 21:35

Re: Урок 44. События в ListView

Сообщение kefir_mbis » 24 ноя 2015, 19:21

Realist писал(а):
В первой активности сделайте список с url. В onItemClick :

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

Intent intent = new Intent(StartActivity.this, UrlActivity.class);
intent.putExtra("url", vashSpisok.get(position));
startActivity(intent);
Во второй активности в onCreate:

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

String url = getIntent().getStringExtra("url");
Урок 28 почитайте.
Я от этого урока и отталкивался. Там передается значение текста в string, которое отображается в новой активности.

Но я повторюсь, не нашел примеров для моего случая, оттуда и сложности.

За оперативность и подсказку огромное спасибо ;)

kefir_mbis
Сообщения: 5
Зарегистрирован: 31 окт 2013, 21:35

Re: Урок 44. События в ListView

Сообщение kefir_mbis » 24 ноя 2015, 20:28

kefir_mbis писал(а):
Я от этого урока и отталкивался. Там передается значение текста в string, которое отображается в новой активности.

Но я повторюсь, не нашел примеров для моего случая, оттуда и сложности.

За оперативность и подсказку огромное спасибо ;)
Сделал так:

Первая активность

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

// Обработка события на клик по элементу списка
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    	@Override
    	public void onItemClick(AdapterView<?> parent, View itemClicked, int position,
    	long id) {
    	if (position==0){
    		Intent intent = new Intent(StartActivity.this, One_oneActivity.class);
            intent.putExtra("KeyName", "http://ya.ru");  // pass your values and retrieve them in the other Activity using AnyKeyName
                    startActivity(intent);
    	}
Вторая активность

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

protected void initUI() {
   mWebViewone_one = ((FrameLayout)findViewById(R.id.webViewone_one));

   if (WebView == null) {
       WebView = new WebView(this);
       String data = getIntent().getExtras().getString("KeyName");
       WebView.loadUrl(data);
       WebView.getSettings().setJavaScriptEnabled(true);
   }
Впринципи работает.

Realist, спасибо за помощь :)

baran2k
Сообщения: 1
Зарегистрирован: 25 июл 2017, 10:12

Re: Урок 44. События в ListView

Сообщение baran2k » 25 июл 2017, 10:16

i.lavrenov писал(а):
MASK писал(а):
Serge писал(а):После этого урока возник вопрос по эмулятору.
ItemSelect у меня вызывается только при нажатии пробела, при этом позиционируется на строке, где был последний клик. Ни кнопки курсора, ни колесо мыши не работает.
Спасибо большое за это сообщение, а то я уже не знала как заставить работать этот OnItemSelectedListener. На эмуляторе теперь работает, а вот как его активировать на реальном девайсе - ума не приложу, там-то нет клавиатуры с пробелом :roll:
Если кто-то разобрался - прошу помощи, хотя подозреваю, что этот метод на самом деле оставлен в коде рудиментарно и в жизни не используется.
Буду рада любым ответам!
Добавьте эту информацию в урок, пожалуйста!
Таже проблема, не работает ItemSelect, не могу никак разобраться ......

WKBAPKA
Сообщения: 32
Зарегистрирован: 03 янв 2014, 14:28

Re: Урок 44. События в ListView

Сообщение WKBAPKA » 21 сен 2017, 11:00

MASK писал(а):
Serge писал(а):После этого урока возник вопрос по эмулятору.
ItemSelect у меня вызывается только при нажатии пробела, при этом позиционируется на строке, где был последний клик. Ни кнопки курсора, ни колесо мыши не работает.
Спасибо большое за это сообщение, а то я уже не знала как заставить работать этот OnItemSelectedListener. На эмуляторе теперь работает, а вот как его активировать на реальном девайсе - ума не приложу, там-то нет клавиатуры с пробелом :roll:
Если кто-то разобрался - прошу помощи, хотя подозреваю, что этот метод на самом деле оставлен в коде рудиментарно и в жизни не используется.
Буду рада любым ответам!
мне тоже стало интересно и вот что оказывается. нажатие в режиме Touch mode не вызывает это событие, т.к. не происходит выделения элемента. Это событие срабатывает только когда выделения происходит с помощью аппаратных кнопок. Поэтому у коллеги и сработало по пробелу.
Приведу оригинал ответа с одного сайта:

It's because you happen to be testing with your fingers on a touch-enabled device. In touch mode, there is no focus and no selection. UIs that need selection should use a different type of widget, such as radio buttons.

кстати, именно поэтому в уроке автор написал, прокрутите клавишами. Т.к. урок написан давно, явно что то поменялось. У меня в эмуляторе кнопки не работают в принципе.

Alexej
Сообщения: 1
Зарегистрирован: 28 сен 2017, 21:47

Re: Урок 44. События в ListView

Сообщение Alexej » 28 сен 2017, 22:38

Всем привет!
Пишу мое первое приложение, сборник песен. Сначала выводится весь список песен и смотря какую песню пользователь выберет, открывается второе Activity и там по идее должен отобразиться текст этой песни. Для каждого текста есть свой string-array c именем - "lied+номер песни". Есть у кого-нибудь идеи, как это лучше оформить? Думал сделать это так: считывается позиция нажатие и передается в другую Activity, т.е. если песни идут по порядку, то позиция + 1 это номер песни, или? Но как мне теперь выбрать в функции getResources().getStringArray() именно эту песню, если там надо имя string-array вводить?

Ответить