Урок 51. SimpleAdapter, добавление и удаление записей
-
- Сообщения: 28
- Зарегистрирован: 12 мар 2014, 12:06
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Никак не получается сделать редактирование. Смог сделать только кнопку в контекстном меню для редактирования. Помогите с кодом.
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Подскажите пжл! Не знаю как создать простейший код.
Есть пункт списка.xml.
Задача: при каждом нажатии кнопки в списке должен добавляться новый пункт.
Все пункты будут одинаковы, никаких данных и текстов (пока) вносить не надо.
Какой адаптер использовать?
И что писать здесь:
public void onButtonClick(View v) {
// не могу понять из урока, если я ничего не вношу, т.е. все пункты одинаковы
// что тогда здесь будет добавлять новый пункт списка?
}
Есть пункт списка.xml.
Задача: при каждом нажатии кнопки в списке должен добавляться новый пункт.
Все пункты будут одинаковы, никаких данных и текстов (пока) вносить не надо.
Какой адаптер использовать?
И что писать здесь:
public void onButtonClick(View v) {
// не могу понять из урока, если я ничего не вношу, т.е. все пункты одинаковы
// что тогда здесь будет добавлять новый пункт списка?
}
- Вложения
-
- Снимок.JPG (10.69 КБ) 13920 просмотров
Re: Урок 51. SimpleAdapter, добавление и удаление записей
ListView - это отображение данных, визуальный объект.
Adapter - это посредник между данными и этим отображением.
а вот данные - это самое главное. Посмотрите уроки, обращая внимание на каких данных основаны списки, выберите себе подходящий (тут любой подойдет) и организуйте по нажатию кнопки ДОБАВЛЕНИЕ ДАННЫХ. Тогда адаптер их отобразит в списке.
Adapter - это посредник между данными и этим отображением.
а вот данные - это самое главное. Посмотрите уроки, обращая внимание на каких данных основаны списки, выберите себе подходящий (тут любой подойдет) и организуйте по нажатию кнопки ДОБАВЛЕНИЕ ДАННЫХ. Тогда адаптер их отобразит в списке.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
-
- Сообщения: 28
- Зарегистрирован: 12 мар 2014, 12:06
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Сделал редактирование через диалог. Но данные выводится пока только в TextView.
С ListView не могу сделать т.к. не знаю метод который выводит данные в ListView. Помогите с кодом
Код: Выделить всё
public class MainActivity extends Activity {
final String LOG = "myLogs";
final int DIALOG_EDIT = 1;
final Context context = this;
TextView text1;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
text1 = (TextView) findViewById(R.id.text1);
}
public void onclick(View v) {
// вызываем диалог
showDialog(DIALOG_EDIT);
}
protected Dialog onCreateDialog(int id) {
if (id == DIALOG_EDIT) {
AlertDialog.Builder adb = new AlertDialog.Builder(this);
// !
// get prompts.xml view
LayoutInflater li = LayoutInflater.from(context);
View promptsView = li.inflate(R.layout.promts, null);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
context);
// set prompts.xml to alertdialog builder
alertDialogBuilder.setView(promptsView);
final EditText userInput = (EditText) promptsView
.findViewById(R.id.editTextDialogUserInput);
// set dialog message
alertDialogBuilder
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
// get user input and set it to result
// edit text
text1.setText(userInput.getText());
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
// !
return super.onCreateDialog(id);
}
}
Код: Выделить всё
public class MainActivity extends Activity {
// элементы списка которые будут в него внесены
String[] data = { "Click", "Click", "Ckick" };
int DIALOG_TIME = 1;
int myHour = 12;
int myMinute = 00;
ListView lvMain;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Связываемся с ListView
ListView lvMain = (ListView) findViewById(R.id.lvMain);
// создаем адаптер
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, data);
// устанавливаем адаптер списку
lvMain.setAdapter(adapter);
// public void onclick(View view) {
// showDialog(DIALOG_TIME);
lvMain.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
showDialog(DIALOG_TIME);
}
});
}
protected Dialog onCreateDialog(int id) {
if (id == DIALOG_TIME) {
TimePickerDialog tpd = new TimePickerDialog(this, myCallBack,
myHour, myMinute, true);
return tpd;
}
return super.onCreateDialog(id);
}
OnTimeSetListener myCallBack = new OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
myHour = hourOfDay;
myMinute = minute;
// lvMain.setFilterText("Time is " + myHour + " hours " + myMinute
// + " minutes");
}
};
}
Re: Урок 51. SimpleAdapter, добавление и удаление записей
всем привет подскажите как можно сделать редактирование хотя бы метод?
-
- Сообщения: 15
- Зарегистрирован: 02 июл 2014, 15:26
Re: Урок 51. SimpleAdapter, добавление и удаление записей
как удалить Map из коллекции, используя кнопку а не контексное меню ?)
или другими словами как подругому реализовать вот етот код
public boolean onContextItemSelected(MenuItem item) {
if (item.getItemId() == CM_DELETE_ID) {
if (n==elhp){elhp=0;}
// получаем инфу о пункте списка
AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item.getMenuInfo();
// удаляем Map из коллекции, используя позицию пункта в списке
data.remove(acmi.position);
// уведомляем, что данные изменились
sAdapter.notifyDataSetChanged();
return true;
}
return super.onContextItemSelected(item);
}
не прибигая к используванию контексного меню а с помощю кнопки, я понимаю что нужно id позиции, как вот его получить етот id?
или другими словами как подругому реализовать вот етот код
public boolean onContextItemSelected(MenuItem item) {
if (item.getItemId() == CM_DELETE_ID) {
if (n==elhp){elhp=0;}
// получаем инфу о пункте списка
AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item.getMenuInfo();
// удаляем Map из коллекции, используя позицию пункта в списке
data.remove(acmi.position);
// уведомляем, что данные изменились
sAdapter.notifyDataSetChanged();
return true;
}
return super.onContextItemSelected(item);
}
не прибигая к используванию контексного меню а с помощю кнопки, я понимаю что нужно id позиции, как вот его получить етот id?
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Не знаю какая у вас коллекция используется, но помимо удаления по индексу у коллекций есть методы удаления по содержимому
java.util.Collection.remove(Object object) - метод просматривает коллекцию, находит первый же объект коллекции эквивалентный указанному аргументу(используя object.equals()) и удаляет его, т.е. индекс в данном случае не нужен.
java.util.Collection.remove(Object object) - метод просматривает коллекцию, находит первый же объект коллекции эквивалентный указанному аргументу(используя object.equals()) и удаляет его, т.е. индекс в данном случае не нужен.
-
- Сообщения: 15
- Зарегистрирован: 02 июл 2014, 15:26
Re: Урок 51. SimpleAdapter, добавление и удаление записей
я начинаю изучать только , будьте добри, обясните для чайника както по подробнее с примерами )Viewer писал(а):Не знаю какая у вас коллекция используется, но помимо удаления по индексу у коллекций есть методы удаления по содержимому
java.util.Collection.remove(Object object) - метод просматривает коллекцию, находит первый же объект коллекции эквивалентный указанному аргументу(используя object.equals()) и удаляет его, т.е. индекс в данном случае не нужен.
сначало изпользувать метод java.util.Collection.remove(Object ' <-- ето системное названи оставлять без изминений, а вместо етого вставлять --> ' object '?') тип object ето строка,перменая и т.д? object.equals() насколько хватает моих знаний "()" ето значит что оно чтото откудато читает , так вот , напиши мне чайнику в одну строчку правильний синтаксис с примером ) буду благодарен , делаю инвентарь для своей игри , уже неделю)))
Re: Урок 51. SimpleAdapter, добавление и удаление записей
[syntax=java]ArrayList<String> mistress = new ArrayList<String>();nazar_developer писал(а): я начинаю изучать только , будьте добри, обясните для чайника както по подробнее с примерами )
сначало изпользувать метод java.util.Collection.remove(Object ' <-- ето системное названи оставлять без изминений, а вместо етого вставлять --> ' object '?') тип object ето строка,перменая и т.д? object.equals() насколько хватает моих знаний "()" ето значит что оно чтото откудато читает , так вот , напиши мне чайнику в одну строчку правильний синтаксис с примером ) буду благодарен , делаю инвентарь для своей игри , уже неделю)))
mistress.add("Маша");
mistress.add("Катя");
mistress.add("Наташа");
mistress.add("Люба");
System.out.println("Список любовниц:");
for (String name : mistress) {
System.out.println(name);
}
//Поссорились с Катей, удаляем её из списка
mistress.remove("Катя");
System.out.println("Новый список любовниц:");
for (String name : mistress) {
System.out.println(name);
}[/syntax]
-
- Сообщения: 15
- Зарегистрирован: 02 июл 2014, 15:26
Re: Урок 51. SimpleAdapter, добавление и удаление записей
ахах ) спасибо , походу понял)Viewer писал(а):[syntax=java]ArrayList<String> mistress = new ArrayList<String>();nazar_developer писал(а): я начинаю изучать только , будьте добри, обясните для чайника както по подробнее с примерами )
сначало изпользувать метод java.util.Collection.remove(Object ' <-- ето системное названи оставлять без изминений, а вместо етого вставлять --> ' object '?') тип object ето строка,перменая и т.д? object.equals() насколько хватает моих знаний "()" ето значит что оно чтото откудато читает , так вот , напиши мне чайнику в одну строчку правильний синтаксис с примером ) буду благодарен , делаю инвентарь для своей игри , уже неделю)))
mistress.add("Маша");
mistress.add("Катя");
mistress.add("Наташа");
mistress.add("Люба");
System.out.println("Список любовниц:");
for (String name : mistress) {
System.out.println(name);
}
//Поссорились с Катей, удаляем её из списка
mistress.remove("Катя");
System.out.println("Новый список любовниц:");
for (String name : mistress) {
System.out.println(name);
}[/syntax]
-
- Сообщения: 15
- Зарегистрирован: 02 июл 2014, 15:26
Re: Урок 51. SimpleAdapter, добавление и удаление записей
какой коструктор ArrayList использувать для метода data.add(int index, Map<String, Object> object) ?
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Назар, пишите грамотно. То, что вы пишете, невозможно читать.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
-
- Сообщения: 15
- Зарегистрирован: 02 июл 2014, 15:26
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Російську мову погано знаю, але це і не дивно, бо я Українець !KamiSempai писал(а):Назар, пишите грамотно. То, что вы пишете, невозможно читать.
чи ви мали на увазі сам код?) але це немає сенсу, я вже вирішив проблему, хто також з нею зустрічався, напишіть я тоді дам відповідь)
-
- Сообщения: 15
- Зарегистрирован: 02 июл 2014, 15:26
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Код: Выделить всё
SimpleAdapter sAdapter;
ArrayList < Map<String, Object>> data;
Map<String, Object> Map;
....
data = new ArrayList<Map<String, Object>>();
String[] from = { ATTRIBUTE_NAME_TEXT, ATTRIBUTE_NAME_AMOUNT };
int[] to = { R.id.tvText, R.id.txtAmount};
sAdapter = new SimpleAdapter(this, data, R.layout.item, from, to);
Map = new HashMap<String, Object>();
Map.put(ATTRIBUTE_NAME_TEXT, "Текст ");
Map.put(ATTRIBUTE_NAME_AMOUNT, Amount);
data.add(Map);
int INDEX_MAP = data.indexOf(Map);
есть же такой метод(мне так еклипс пишет) get(int index) : Map<String,Object> ArrayList
возможно ли с помощю етого метода получить Object ?
или я вот так обясню по другому, на уроке говорилось что удалять будем с помощю контексного меню, так вот ,ето хорошо, но мне надо чтоб еше изменялись кое какие дание , ето кусок из кода жирни обозначена переменная int Amount , мне нужно чтоб при нажатии она становилась = 0; но я никак немогу получить к ней доступ.
"
Map.put(ATTRIBUTE_NAME_AMOUNT, Amount);
"
возможно ли ето в Контексном меню?
жду ответа) зарание спасибо )
Последний раз редактировалось nazar_developer 25 июл 2014, 15:53, всего редактировалось 1 раз.
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Из полученного этим методом HashMap можно получить ваш Object вызовом get(key) (в вашем случае Map.get(key))есть же такой метод(мне так еклипс пишет) get(int index) : Map<String,Object> ArrayList
возможно ли с помощю етого метода получить Object ?
ПС В JAVA принято с большой буквы именовать классы, а поля(переменные) желательно именовать с маленькой буквы, привыкайте сразу, потом будет меньше путаницы
-
- Сообщения: 15
- Зарегистрирован: 02 июл 2014, 15:26
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Viewer писал(а): Из полученного этим методом HashMap можно получить ваш Object вызовом get(key) (в вашем случае Map.get(key))
Код: Выделить всё
int a = data.indexOf(acmi.position);
Map= data.get(a);
Object a = Map.get(key);
Toast.makeText(this, a, Toast.LENGTH_SHORT).show();
в 4 строке "Object a" екслипс ругаетса, говорит только может бить тип Object ((( кстате на key также ругаетса(
может в личку где нибуть напишу поможеш а? )
Re: Урок 51. SimpleAdapter, добавление и удаление записей
key это то что задается первым аргументом в put (ATTRIBUTE_NAME_TEXT или ATTRIBUTE_NAME_AMOUNT в вашем коде)
Object a = (Object)Map.get(key);
Наведите курсор на то на что ругается, Эклипс вам предложит варианты исправления, скорее всего нужно будет указать приведение к нужному типу"Object a" екслипс ругаетса
Object a = (Object)Map.get(key);
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Помогите справиться с проблемой:
Имеется список, аналогичный примеру. Есть ArrayList<Map<String, String>>. Адаптер - SimpleAdapter.
Проблема возникает при перевороте экрана: список обнуляется. Попробовал использовать onSaveInstanceState и onRestoreInstanceState. В Bundle записываю по отдельности два StringArrayList. Соответственно в onRestoreInstanceState считываю два этих StringArrayList и через объект типа HashMap<String, String> формирую ArrayList<Map<String, String>>. Однако как только адаптер начинает обрабатывать полученный ArrayList он почему-то всем полям присваивает значение последнего. Соответственно в списке после переворота видно требуемое количество строк, но все они одинаковые и равны последнему записанному значению из ArrayList ((. Проверил в логах: в момент передачи из Bundle, в момент передачи данных в HashMap и в момент добавления записи в ArrayList всё выполняется правильно, а вот далее запара ( Подскажите плиз в чем может быть дело
Имеется список, аналогичный примеру. Есть ArrayList<Map<String, String>>. Адаптер - SimpleAdapter.
Проблема возникает при перевороте экрана: список обнуляется. Попробовал использовать onSaveInstanceState и onRestoreInstanceState. В Bundle записываю по отдельности два StringArrayList. Соответственно в onRestoreInstanceState считываю два этих StringArrayList и через объект типа HashMap<String, String> формирую ArrayList<Map<String, String>>. Однако как только адаптер начинает обрабатывать полученный ArrayList он почему-то всем полям присваивает значение последнего. Соответственно в списке после переворота видно требуемое количество строк, но все они одинаковые и равны последнему записанному значению из ArrayList ((. Проверил в логах: в момент передачи из Bundle, в момент передачи данных в HashMap и в момент добавления записи в ArrayList всё выполняется правильно, а вот далее запара ( Подскажите плиз в чем может быть дело
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Без кода сложно, что-то сказать.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Попробую выложить ту часть, которая непосредственно касается проблемы:
Примерно такой код
Код: Выделить всё
public class InputActivity extends Activity {
...
ListView lvSimple;
private ArrayList<Map<String,String>> iList = new ArrayList<Map<String, String>>();
Map<String, String> m;
ArrayList<String> iinmas = new ArrayList<String>();
ArrayList<String> iinfmas = new ArrayList<String>();
String[] from = { I_NAME, I_INFO };
int[] to = {R.id.tvIname,R.id.tvIinfol };
...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
....
lvSimple = (ListView) findViewById(R.id.lvSimple);
lvSimple.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
final SimpleAdapter adapter1 = new SimpleAdapter(inpact, iList , R.layout.i_item_list,from, to);
lvSimple.setAdapter(adapter1);
....
OnClickListener oclBtninp = new OnClickListener() { //тут наполняю iList
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.inpbtn1:
...
String sInput = edInputI.getText().toString(); //с одного эдиттекста беру одну строку
m = new HashMap<String, String>();
m.put(I_NAME, sInput);
String sst=edIinfo.getText().toString(); //со второго эдиттекста беру вторую строку
m.put(I_INFO , sst);
iList .add(m); //формирую ArrayList с данными для Листвью
adapter1.notifyDataSetChanged();
iinmas.add(sInput); //закидую те же данные в ArrayList'ы созданные для Биндла
iinfmas.add(sst);
...
}
}
}
...
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putStringArrayList("mass1", iinmas); //закидую данные из ArrayList'ов в Биндла
outState.putStringArrayList("mass2", iinfmas);
}
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
iinmas=savedInstanceState.getStringArrayList("mass1");
iinfmas=savedInstanceState.getStringArrayList("mass2");
iList.clear();
HashMap<String, String> mmm = new HashMap<String, String>();
for (int i = 0; i <= (iinmas.size()-1); i++) {
mmm.clear();
mmm.put(I_NAME, iinmas.get(i));
Log.i(TAG, "Element N = "+Integer.toString(i));
Log.i(TAG, "Name = "+iinmas.get(i));
mmm.put(I_INFO , iinfmas.get(i));
Log.i(TAG, "Text = "+iinfmas.get(i));
iList.add(i, mmm);
Log.i(TAG, "Name1 = "+iList.get(i).get(I_NAME)); //пока всё ок
}
for (int i = 0; i <= (ingredn.size()-1); i++) { //делаю проверку содержимого ещё раз
mmm=iList.get(i);
Log.i(TAG, "Element N = "+Integer.toString(i)); //здесь уже все элементы iList такие же как элемент который был последним :(((
Log.i(TAG, "Name = "+mmm.get(I_NAME));
Log.i(TAG, "Text = "+mmm.get(I_INFO ));
}
}
......