Задать вопрос
bodia7
@bodia7
Начинающий веб-разработчик

Как из ListView вызывать соответствующие элементу списка описание в AlertDialog?

Начал делать первое приложение для Андроид. Столкнулся с такой проблемой: хочу чтобы при нажатии на элемент списка вызвался AlertDialog с описанием этого элемента. Для каждого элемента свой Title, icon, message (описание), либо же заменить message на textview. Помогите пожалуйста. Понятно что нужно загнать как-то это всё в массив, как - не понятно:) Вызов AlertDialog для одного элемента (вызываю при нажатии на TextView):
public void onShowDialog(View view){ AlertDialog.Builder builder = new AlertDialog.Builder(ShotDrinks.this);

    builder.setTitle("Название")
            .setMessage("Какое-то описание")
            .setCancelable(true)
            .setIcon(R.drawable.ic_launcher)
            .setNegativeButton("Закрыть", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            })
            .setPositiveButton ("Поделиться", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    final Intent intent = new Intent(Intent.ACTION_SEND);
                    intent.setType("text/plain");
                    intent.putExtra(Intent.EXTRA_SUBJECT, "_SUBJECT_");
                    intent.putExtra(Intent.EXTRA_TEXT, "_BODY_");
                    startActivity(Intent.createChooser(intent, getString(R.string.app_name)));
                }
            });
    AlertDialog alert = builder.create();
    alert.show();
}
  • Вопрос задан
  • 541 просмотр
Подписаться 1 Оценить 5 комментариев
Решения вопроса 1
bodia7
@bodia7 Автор вопроса
Начинающий веб-разработчик
public class ShotDrinks extends ActionBarActivity {

String title[] = new String[]{"Б-52","Зеленый мексиканец","Оборотень","Аут","БМВ"};
String description[] = new String[]{"Бейлис, калуа, трипл сек","Текила, лимонный сок, пизан","лалалалал","Виски, коньяк, водка, самбука","текила, трипл сек, самбука"};
int[] icons = new int [] {R.drawable.b52, R.drawable.green_mexicano, R.drawable.oboroten, R.drawable.ayt, R.drawable.bmw};

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.shot_drinks);

// Связываемся с ListView
ListView list = (ListView) findViewById(R.id.lvMain);

// создаем адаптер
ArrayAdapter adapter = new ArrayAdapter
(this, android.R.layout.simple_list_item_1, title);

// устанавливаем адаптер списку
list.setAdapter(adapter);

list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
onShowDialog(title[position], description[position], icons[position]);
}
});
}

public void onShowDialog(String title, String message, int drawable){
AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setTitle(title)
.setMessage(message)
.setCancelable(true)
.setIcon(drawable)
.setNegativeButton("Закрыть", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
})
.setPositiveButton ("Поделиться", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "_SUBJECT_");
intent.putExtra(Intent.EXTRA_TEXT, "_BODY_");
startActivity(Intent.createChooser(intent, getString(R.string.app_name)));
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kamiLLxiii
Android-разработчик
Примерно это будет выглядеть так:
ListView (который заменит TextView) отображает данные из переданной ему коллекции или списка элементов. Следовательно, вам надо будет создать класс для элементов, наподобие:
class CocktailItem{
		String title;
		String description;
		Bitmap icon;
}

Создаете коллекцию коктейлей с использование этого класса, создаете Adapter с этой коллекцией, передаете его (адаптер) в ListView, делаете ему (ListView) setOnItemClickListener, и в этот OnItemClickListener при нажатии будет приходить номер элемента в списке коктейлей. Этот элемент можно там же и получить, примерно так:
AdapterView.OnItemClickListener() {
		@Override
		public
		void onItemClick(final AdapterView<?> parent, final View view, final int position, final long id) {
			CocktailItem item = (CocktailItem) parent.getAdapter().getItem(position);
			AlertDialog.Builder builder = new AlertDialog.Builder(ShotDrinks.this);

			builder.setTitle(item.title)
					.setMessage(item.description)
					.setCancelable(true)
					.setIcon(R.drawable.ic_launcher)
					...
		}
	};


В общем, если вы размебетесь, как работает ListView и Adapter, все вопросы отпадут сами собой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы