Урок 41. Используем LayoutInflater для создания списка

Обсуждение уроков
iisus92
Сообщения: 1
Зарегистрирован: 04 май 2013, 13:04

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение iisus92 » 04 май 2013, 13:14

присоединиюсь к предыдущему вопросу.

в item-ах лежат RadioButton, 4 штуки.
по какому из 4х кликнули определяется легко, а как выяснить контейнер (item) в котором это все лежит?

как создаю :

[syntax=java]
for (int i = 0; i < ImageResMatrix.length; i++)
{
View item = ltInflater.inflate(R.layout.test_item, linLayout, false);
ImageView image = (ImageView) item.findViewById(R.id.image_question);
image.setImageResource(ImageResMatrix);
ItemId = item.getId();
linLayout.addView(item);
}
[/syntax]

обрабатываю :

[syntax=java]
public void OnTestItemRBClick (View v)
{
RadioButton rb = (RadioButton)findViewById(v.getId());
rb.setBackgroundColor(Color.GREEN); //какое-то действие для примера
}[/syntax]
на какой-бы RadioButton я не жал, цвет (в данном случае) меняет только фон RadioButton-а на самом первом item-е

как быть?

kolyall
Сообщения: 1
Зарегистрирован: 27 май 2013, 13:59

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение kolyall » 27 июн 2013, 23:05

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

package com.example.list;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{

	 String[] name = { "Иван", "Марья", "Петр", "Антон", "Даша", "Борис",
		      "Костя", "Игорь" };
		  String[] position = { "Программер", "Бухгалтер", "Программер",
		      "Программер", "Бухгалтер", "Директор", "Программер", "Охранник" };
		  int salary[] = { 13000, 10000, 13000, 13000, 10000, 15000, 13000, 8000 };

		  int[] colors = new int[2];

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		 /*LinearLayout linLayout = (LinearLayout) findViewById(R.id.linLayout);
		
		 LayoutInflater ltInflater = getLayoutInflater();
		 
		 View item = ltInflater.inflate(R.layout.item, linLayout, false);
		  TextView tvName = (TextView) item.findViewById(R.id.tvName);
	      tvName.setText("Me");
	      TextView tvPosition = (TextView) item.findViewById(R.id.tvPosition);
	      tvPosition.setText("Должность: ");
	      TextView tvSalary = (TextView) item.findViewById(R.id.tvSalary);
	      tvSalary.setText("Оклад: " + String.valueOf("salary"));
	      item.getLayoutParams().width = LayoutParams.MATCH_PARENT;
	      item.setOnClickListener(this);
	      linLayout.addView(item);
	      
	      
	      
	      
	      
	      View item2 = ltInflater.inflate(R.layout.item, linLayout, false);
		  TextView tvName2 = (TextView) item2.findViewById(R.id.tvName);
	      tvName2.setText("Me2");
	      TextView tvPosition2 = (TextView) item2.findViewById(R.id.tvPosition);
	      tvPosition2.setText("Должность2: ");
	      TextView tvSalary2 = (TextView) item2.findViewById(R.id.tvSalary);
	      tvSalary2.setText("Оклад2: " + String.valueOf("salary"));
	      item2.getLayoutParams().width = LayoutParams.MATCH_PARENT;
	      item2.setOnClickListener(this);
	      linLayout.addView(item2);*/
		
		 colors[0] = Color.parseColor("#559966CC");
		    colors[1] = Color.parseColor("#55336699");

		    LinearLayout linLayout = (LinearLayout) findViewById(R.id.linLayout);

		    LayoutInflater ltInflater = getLayoutInflater();

		    for (int i = 0; i < name.length; i++) {
		      Log.d("myLogs", "i = " + i);
		      View item = ltInflater.inflate(R.layout.item, linLayout, false);
		      TextView tvName = (TextView) item.findViewById(R.id.tvName);
		      tvName.setText(name[i]);
		      OnClickListener oclBtnOk = new OnClickListener() {
			       @Override
			       public void onClick(View v) {
			    		switch (v.getId()){
			    		case (R.id.tvName):{
			    			Toast.makeText(getApplicationContext(), "Click on item", 100).show();
			    			
			    			TextView tvName = (TextView) v.findViewById(R.id.tvName);
			    			Log.d("My", "tvNAme"+tvName.getText());
			    			break;
			    		}
			    		case (R.id.tvPosition):{
			    			Toast.makeText(getApplicationContext(), "Click on item", 100).show();
			    			Log.d("My", "tvPosition");
			    			break;
			    		}
			    		case (R.id.tvSalary):{
			    			Toast.makeText(getApplicationContext(), "Click on item", 100).show();
			    			Log.d("My", "tvSalary");
			    			break;
			    		}
			    		case (R.id.vImage):{
			    			Toast.makeText(getApplicationContext(), "Click on item", 100).show();
			    			Log.d("My", "vImage");
			    			break;
			    		}
			    		}
			       }
			     };
			 
		      TextView tvPosition = (TextView) item.findViewById(R.id.tvPosition);
		      tvPosition.setText("Должность: " + position[i]);
		      
		      TextView tvSalary = (TextView) item.findViewById(R.id.tvSalary);
		      tvSalary.setText("Оклад: " + String.valueOf(salary[i]));
		      
		      View vImage = (View) item.findViewById(R.id.vImage);
		      
		      item.getLayoutParams().width = LayoutParams.MATCH_PARENT;
		      //item.setBackgroundColor(colors[i % 2]);
		      item.setOnClickListener(this);
		      item.setClickable(true);
		      vImage.setOnClickListener(oclBtnOk);
		     /* tvName.setOnClickListener(oclBtnOk) ;
		      tvPosition.setOnClickListener(oclBtnOk) ;
		      tvSalary.setOnClickListener(oclBtnOk) ;
		      vImage.setOnClickListener(oclBtnOk);*/
		      linLayout.addView(item);
		      
		    }
	     
	      linLayout.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 void onClick(View v) {
		// TODO Auto-generated method stub
		
		TextView tvName = (TextView) v.findViewById(R.id.tvName);
		tvName.getText();
		Toast.makeText(getApplicationContext(), "Click on "+tvName.getText(), 100).show();
		v.setBackgroundColor(Color.parseColor("#559966CC"));
		Log.d("My", "item"+" "+	tvName.getText());
		
		
		
		
	}

}
Как сделать кликабельным?Т.е чтобы была анимация нажатия..

Banhammer
Сообщения: 32
Зарегистрирован: 24 июн 2013, 17:09

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение Banhammer » 29 июн 2013, 21:35

ам, заметил одну вещь: между каждым добавленным View в список есть падинг, тоесть они не плотно прилегают друг к другу, но в xml не указан же падинг, почему он есть и как его можно убрать?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение rezak90 » 29 июн 2013, 21:50

У меня нету Энигмы, так что может по подробней скажешь и покажешь о каком падинге идёт речь?
R.id.team
Политика на форуме запрещена

Banhammer
Сообщения: 32
Зарегистрирован: 24 июн 2013, 17:09

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение Banhammer » 29 июн 2013, 21:54

http://startandroid.ru/ru/uroki/vse-uro ... piska.html <-писька лол
прогартай урок вниз, на последний скрин, там каждый добавленный View не плотно прилегает к следующему и предыдущему, тоесть есть отступ, как падинг. вот как избавиться от этого отступа или почему он появился то)

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение rezak90 » 29 июн 2013, 22:29

там же стоит android:layout_marginTop="10dp"
от сюдава и отступ
R.id.team
Политика на форуме запрещена

Banhammer
Сообщения: 32
Зарегистрирован: 24 июн 2013, 17:09

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение Banhammer » 29 июн 2013, 22:39

странно, я смотрел, то не увидел, ща пересмотрю ещё разок, пропустил наверно, спасибо)
кста, ты не знаешь, как получить номер элемента списка, нажатием на него. какой обработчик повесить на layoutInflater?
upd
внезапно оказалось, что не вешаются обработчики на layoutInflater эт грустно...

Banhammer
Сообщения: 32
Зарегистрирован: 24 июн 2013, 17:09

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение Banhammer » 29 июн 2013, 23:19

просто суть такова, есть Layout в нём 3 view. каждый должен был обработан.
вот элемент списка- эти 3 View
единственное, что я вижу- обработка нажатия каждого View до того, как он будет засунут в элемент списка, но как-то не красиво.
может есть способ проще?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение rezak90 » 29 июн 2013, 23:40

делай ListView и получится обработка нажатия будет одна для всех
R.id.team
Политика на форуме запрещена

Banhammer
Сообщения: 32
Зарегистрирован: 24 июн 2013, 17:09

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение Banhammer » 29 июн 2013, 23:44

ну это понятно, но я хочу побаловаться именно с этой мутью)

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение rezak90 » 30 июн 2013, 00:02

это муть велосипед, зачем изобретать его если уже всё есть?
R.id.team
Политика на форуме запрещена

Banhammer
Сообщения: 32
Зарегистрирован: 24 июн 2013, 17:09

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение Banhammer » 30 июн 2013, 00:21

ну ты рассматриваешь ситуацию с слишком серьёзной точки зрения))

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение rezak90 » 30 июн 2013, 00:50

ну тогда вешай на каждый View обработчик
R.id.team
Политика на форуме запрещена

Z11
Сообщения: 9
Зарегистрирован: 05 июн 2013, 19:12

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение Z11 » 30 июн 2013, 10:48

Banhammer писал(а):просто суть такова, есть Layout в нём 3 view. каждый должен был обработан.
вот элемент списка- эти 3 View
единственное, что я вижу- обработка нажатия каждого View до того, как он будет засунут в элемент списка, но как-то не красиво.
может есть способ проще?

В обсуждении урока 40 viewtopic.php?t=93 пост 4 есть то что ты хочешь.
У меня тест получился (как там написано)

Максим Янчий
Сообщения: 77
Зарегистрирован: 21 июл 2013, 17:33

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение Максим Янчий » 21 июл 2013, 17:39

Здравствуйте! у меня возник вопрос)
Я хочу вывести из базы данных заметки, но когда запускаю проэкт, они не появляются, а когда присваиваю данное действие кнопке, то все отлично работает, может проблема в создаваемом классе? Заранее спасибо за совет!

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

public void startList(){
		Cursor cursor = sqdb.query(NoteDataBase.TABLE_NAME, new String[] {NoteDataBase.NOTE},null,null,null,null,null);
		
		while(cursor.moveToNext()){
			LinearLayout lLayout = (LinearLayout)findViewById(R.id.lLayout);
			LayoutInflater lInflater = getLayoutInflater();
			String note = cursor.getString(cursor.getColumnIndex(NoteDataBase.NOTE));
			View item = lInflater.inflate(R.layout.item, lLayout, false);
			TextView tvNote = (TextView)item.findViewById(R.id.tvNote);
			tvNote.setText(note);
			item.getLayoutParams().width  = LayoutParams.MATCH_PARENT;
			lLayout.addView(item);
		}
		cursor.close();
	}
Последний раз редактировалось Максим Янчий 21 июл 2013, 19:00, всего редактировалось 1 раз.

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

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение Foenix » 21 июл 2013, 18:25

отформатируй код в редакторе
R.id.team

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

SergeClause
Сообщения: 19
Зарегистрирован: 30 июл 2013, 21:10

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение SergeClause » 31 июл 2013, 15:01

Всем привет!

Скопировал 41й урок один-в-один.
Запустил.
В MainActivity ругается на linLayout, tvName, tvPosition и tvSalary
Пишет
linLayout cannot be resolved or is not a field
и т.д. по остальным вышеупомянутым.
Как от этого избавиться?


SergeClause
Сообщения: 19
Зарегистрирован: 30 июл 2013, 21:10

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение SergeClause » 31 июл 2013, 15:37

no-- писал(а):В импорте убрать import android.R
У меня нет в импорте android.R
Я взял текст из урока буква в букву

=========================================
Всё заработало, вопрос закрыт.
Причина неизвестна.
Вернее, возможно, известна. Но тогда не понятна.

В ErrorLog-e выскакивали сообщения:

Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level
Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory.
The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in
this system level configuration. The Git installation location can be configured on the
Team > Git > Configuration preference page's 'System Settings' tab.
This warning can be switched off on the Team > Git > Confirmations and Warnings preference page.

Warning: The environment variable HOME is not set. The following directory will be used to store the Git
user global configuration and to define the default location to store repositories: 'C:\Documents and Settings\Administrator'. If this is
not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and
EGit might behave differently since they see different configuration options.
This warning can be switched off on the Team > Git > Confirmations and Warnings preference page.

Если гуру разберутся и объяснят, в чем дело, - будем благодарны.

Но сообщения не пропали, продолжают выпадать.

aleksbim
Сообщения: 81
Зарегистрирован: 02 фев 2013, 02:52

Re: Урок 41. Используем LayoutInflater для создания списка

Сообщение aleksbim » 07 авг 2013, 01:38

Вопрос по item.setBackgroundColor(colors[i % 2]);.
[i % 2]-
понятно как это работает здесь, но непонятно, что это. Будьте добры, "%" - это из какого раздела java?

Ответить