Listview, simplecursoradapter и button.
-
- Сообщения: 33
- Зарегистрирован: 30 сен 2013, 12:14
Listview, simplecursoradapter и button.
Соответственно вопрос такой: как подружить листвью составленный с помощью Simplecursoradapter, в каждом итеме кроме текствью и картинки два imagebutton(удалить, реадктировать) и обработку этих самых баттонов? на зарубежных ресурсах находил какие то советы про getView, но к сожалению не смог разобраться что где и как.
Re: Listview, simplecursoradapter и button.
Создать класс который будет наследоваться от любого GroupView и который в свою очередь будет "отображать" лейаут (item SimpleCursorAdapter'a). В getView отдавать объект класса который создал. Соответственно тянуть обработчик OnClickListener от активити/фрагмента в адаптер и передавать его в созданный нами класс в котором будет устанавливаться этот обработчик для кнопок.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 33
- Зарегистрирован: 30 сен 2013, 12:14
Re: Listview, simplecursoradapter и button.
Извните,но не понял вас( вот кодrezak90 писал(а):Создать класс который будет наследоваться от любого GroupView и который в свою очередь будет "отображать" лейаут (item SimpleCursorAdapter'a). В getView отдавать объект класса который создал. Соответственно тянуть обработчик OnClickListener от активити/фрагмента в адаптер и передавать его в созданный нами класс в котором будет устанавливаться этот обработчик для кнопок.
Код: Выделить всё
public class MainActivity extends FragmentActivity implements LoaderCallbacks<Cursor> {
ListView lvForms;
dbForm table_form;
SimpleCursorAdapter scAdapter;
/**
* Called when the activity is first created.
*/
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
table_form=new dbForm(this);
table_form.open();
// формируем столбцы сопоставления
String[] from = new String[]{DBHelper.FORM_NAME, DBHelper.FORM_TITLE};
int[] to = new int[]{R.id.tvFormName, R.id.tvFormTitle};
// создааем адаптер и настраиваем список
scAdapter = new SimpleCursorAdapter(this, R.layout.listform_item, null, from, to, 0);
lvForms = (ListView) findViewById(R.id.lvForms);
lvForms.setAdapter(scAdapter);
// добавляем контекстное меню к списку
registerForContextMenu(lvForms);
// создаем лоадер для чтения данных
getSupportLoaderManager().initLoader(0, null, this);
}
// обработка нажатия кнопки
public void onButtonClick(View view) {
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
startActivity(intent);
}
protected void onDestroy() {
super.onDestroy();
table_form.close();
// закрываем подключение при выходе
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
return new MyCursorLoader(this, table_form);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
scAdapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
static class MyCursorLoader extends CursorLoader {
dbForm table_form;
public MyCursorLoader(Context context, dbForm table_form) {
super(context);
this.table_form = table_form;
}
@Override
public Cursor loadInBackground() {
Cursor cursor = table_form.getAllData();
return cursor;
}
}
}
Re: Listview, simplecursoradapter и button.
для начала попробуй написать кастомный адаптер, среди уроков есть кажется
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 33
- Зарегистрирован: 30 сен 2013, 12:14
Re: Listview, simplecursoradapter и button.
Писал кастомные из baseadapter для простых баз, проблема в том что здесь мне нужен Simplecursoradapter. иначе придется убирать курсор лоадер и гробить все приложение своими костылями. разве нет именно возможности расширить simpleсursoradapter? хочу на его примере понять как это устроить а не в n-й Раз переделывать одно и тоже и стопориться на этом моменте.rezak90 писал(а):для начала попробуй написать кастомный адаптер, среди уроков есть кажется
Re: Listview, simplecursoradapter и button.
ты уверен вообще, что нужно так реализовывать?
редактирование обычно делают по клику на строке списка, а удаление - свайпом справа налево.
редактирование обычно делают по клику на строке списка, а удаление - свайпом справа налево.
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
Re: Listview, simplecursoradapter и button.
видимо мало писал раз не понял что я предложилmechanikos писал(а):Писал кастомные из baseadapter для простых баз
ничто никуда не уберётсяmechanikos писал(а): проблема в том что здесь мне нужен Simplecursoradapter. иначе придется убирать курсор лоадер и гробить все приложение своими костылями
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 33
- Зарегистрирован: 30 сен 2013, 12:14
Re: Listview, simplecursoradapter и button.
c редактированием оговорился. по клику на итем открывается форма-опрос, по клику по одной кнопке удаляется, по клику по другой форма грузится на сервер. делал с контекстным меню но этот вариант был выбран человеками как более удобный и симпатичный. Вот и всё уперлось в эту проблему, которую я не могу никак осмыслить после недели кодинга. надеюсь на помощь и конкретный совет, так как кажется что я просто что то упускаю.Foenix писал(а):ты уверен вообще, что нужно так реализовывать?
редактирование обычно делают по клику на строке списка, а удаление - свайпом справа налево.
-
- Сообщения: 33
- Зарегистрирован: 30 сен 2013, 12:14
Re: Listview, simplecursoradapter и button.
значит я не понимаю, потому что туп или не нашел грамотного объяснения. Пожалуйста объясните мне уже хотя бы на уровне идиота, есть ли способ расширить simplecursoradapter(написать свой, унаследовашись от него, и переопределить методы) а не городить дополнительные классы. искренне надеюсь на вашу благожелательность. Глаз и мозг абсолютно замылились.rezak90 писал(а):видимо мало писал раз не понял что я предложилmechanikos писал(а):Писал кастомные из baseadapter для простых баз
Re: Listview, simplecursoradapter и button.
тут нет ответа?
https://www.google.ru/search?client=ope ... 8&oe=UTF-8
https://www.google.ru/search?client=ope ... 8&oe=UTF-8
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
-
- Сообщения: 33
- Зарегистрирован: 30 сен 2013, 12:14
Re: Listview, simplecursoradapter и button.
спасибо,эти ссылки все уже давно фиолетовые(т.е. открыты),туториалы вогеллы заучены как отче наш и я абсолютно запутался. опыта мало и даже со средним знанием английкого часто не со всеми нюансами могу разобраться как именно надо делать и почему. поэтому и написал на форум. обычно обхожусь гуглом. Понимаю что в общем нужно переопределить getView и прилепить к вьюхам тэги но не понимаю как это сделано и как это экстраполировать на свой случай. извиняюсь если занимаю ваше времяFoenix писал(а):тут нет ответа?
https://www.google.ru/search?client=ope ... 8&oe=UTF-8
Re: Listview, simplecursoradapter и button.
попробуй еще раз перечитать урок, где в строке создаются дополнительные элементы (например, чек бокс) и отклик на их нажатие. Затем замени чекбокс кнопкой и опиши обработку ее нажатия, посмотри что получится и так далее.
А если тебе нужно продвинутсья очень быстро, то можно сделать как можно проще (например, через устаревшее контекстное меню) всю обработку и уже потом, когда будет время, разобраться в данном вопросе и заменить меню кнопками.
Скажу честно, кнопки в листвью не очень удобная идея.. я такие пробовала делать, но мне очень не понравилось удобство, вернее, неудобство использования и я их убрала, переделав "механику" приложения.
А если тебе нужно продвинутсья очень быстро, то можно сделать как можно проще (например, через устаревшее контекстное меню) всю обработку и уже потом, когда будет время, разобраться в данном вопросе и заменить меню кнопками.
Скажу честно, кнопки в листвью не очень удобная идея.. я такие пробовала делать, но мне очень не понравилось удобство, вернее, неудобство использования и я их убрала, переделав "механику" приложения.
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
Re: Listview, simplecursoradapter и button.
Можно тут по громче? ребята тут интерес погналиFoenix писал(а): Скажу честно, кнопки в листвью не очень удобная идея.. я такие пробовала делать, но мне очень не понравилось удобство, вернее, неудобство использования и я их убрала, переделав "механику" приложения.
«Life is too short to spend rewriting code»
Re: Listview, simplecursoradapter и button.
try this one: https://github.com/47deg/android-swipelistview ( sorry, i don`t have russian keyboard here... )mdzht писал(а):Можно тут по громче? ребята тут интерес погналиFoenix писал(а): Скажу честно, кнопки в листвью не очень удобная идея.. я такие пробовала делать, но мне очень не понравилось удобство, вернее, неудобство использования и я их убрала, переделав "механику" приложения.
![Подмигивает ;)](./images/smilies/icon_e_wink.gif)
![Изображение](http://d379ifj7s9wntv.cloudfront.net/reactivemanifesto/images/ribbons/we-are-reactive-green-right.png)
Re: Listview, simplecursoradapter и button.
An arabic commentator would say "h-Alllllaaaaah.."(grateful), what about comment box in android app altwin?altwin писал(а): try this one: https://github.com/47deg/android-swipelistview ( sorry, i don`t have russian keyboard here... )
«Life is too short to spend rewriting code»
Re: Listview, simplecursoradapter и button.
только REST API я даже не представляю, как это сделать иначе. Вы просто открываете диалог предлогая пользователю ввести текст комментария и отправляете его серверу, получаете новый ответ и обновляете комментарии в приложении. Здесь никких особенных библотек не нужно(только если конкретный web ресурс свою готовую имеет по типу facebook), любой REST клиент, просто после отправки отображаете индикатор загрузки, пока не придет обновленный ответ сервера.mdzht писал(а):An arabic commentator would say "h-Alllllaaaaah.."(grateful), what about comment box in android app altwin?altwin писал(а): try this one: https://github.com/47deg/android-swipelistview ( sorry, i don`t have russian keyboard here... )
Можно конечно добавить коментарий в приложении при отсутсвии соединения. а потом синхронизировать, но это бред, а вдруг его сервер не примет, а в каком порядке оно будет и т.д. это все нарушает предсказуемость поведения приложения, вся логика должна быть на сервере.
![Изображение](http://d379ifj7s9wntv.cloudfront.net/reactivemanifesto/images/ribbons/we-are-reactive-green-right.png)
-
- Сообщения: 33
- Зарегистрирован: 30 сен 2013, 12:14
Re: Listview, simplecursoradapter и button.
что ж попрошу помощи еще раз)
решил я все таки писать свой кастомадаптер унаследованный от simplecursoradapter. надеюсь люди увидят что я не прошу готовое решение а просто совет. вот код
к сожалению теперь итемы у меня отображаются но без текста. так же вопрос опять по баттону, на верном ли я пути и как все таки связать его с конкретным id
решил я все таки писать свой кастомадаптер унаследованный от simplecursoradapter. надеюсь люди увидят что я не прошу готовое решение а просто совет. вот код
Код: Выделить всё
class MySimpleCursorAdapter extends SimpleCursorAdapter {
Context ctx;
public MySimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {
super(context, layout, c, from, to, flags);
this.ctx=context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView != null) {
return convertView;
}
return LayoutInflater.from(ctx).inflate(R.layout.listform_item, null);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
String name = cursor.getString(cursor.getColumnIndex(DBHelper.FORM_NAME));
String title = cursor.getString(cursor.getColumnIndex(DBHelper.FORM_TITLE));
TextView formname = (TextView) findViewById(R.id.tvFormName);
formname.setText(name);
TextView formtitle=(TextView) findViewById(R.id.tvFormTitle);
formtitle.setText(title);
ImageButton yourButton = (ImageButton) findViewById(R.id.ibtnDelete);
yourButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(ctx, "Delete button Clicked",
Toast.LENGTH_LONG).show()
;
}
});
}
}
к сожалению теперь итемы у меня отображаются но без текста. так же вопрос опять по баттону, на верном ли я пути и как все таки связать его с конкретным id
Re: Listview, simplecursoradapter и button.
Я не совсем понял вопроса.. видимо у вас есть предыдущие сообщения... но на сколько я понял вам нужно получить view элементы. Во первых зачем вам SimpleCursorAdapter? почему не BaseAdapter? (следуюет ответить на эотт вопрос для себя, как минимум вы хорошо разберетесь, что это вообще такое...). У вас есть метод getView(), который возвращает то, что будет отображаться. Для начала присвойте значение переменной:mechanikos писал(а):что ж попрошу помощи еще раз)
решил я все таки писать свой кастомадаптер унаследованный от simplecursoradapter. надеюсь люди увидят что я не прошу готовое решение а просто совет. вот кодКод: Выделить всё
class MySimpleCursorAdapter extends SimpleCursorAdapter { Context ctx; public MySimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { super(context, layout, c, from, to, flags); this.ctx=context; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView != null) { return convertView; } return LayoutInflater.from(ctx).inflate(R.layout.listform_item, null); } @Override public void bindView(View view, Context context, Cursor cursor) { String name = cursor.getString(cursor.getColumnIndex(DBHelper.FORM_NAME)); String title = cursor.getString(cursor.getColumnIndex(DBHelper.FORM_TITLE)); TextView formname = (TextView) findViewById(R.id.tvFormName); formname.setText(name); TextView formtitle=(TextView) findViewById(R.id.tvFormTitle); formtitle.setText(title); ImageButton yourButton = (ImageButton) findViewById(R.id.ibtnDelete); yourButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(ctx, "Delete button Clicked", Toast.LENGTH_LONG).show() ; } }); } }
к сожалению теперь итемы у меня отображаются но без текста. так же вопрос опять по баттону, на верном ли я пути и как все таки связать его с конкретным id
[syntax=java5]
final View result;
if (convertView == null) {
result = LayoutInflater.from(parent.getContext()).inflate(R.layout.listform_item, parent, false);
} else {
result = convertView;
}
[/syntax]
Далее раз у вас есть несколько view элементов, то наверно и какая то структура в которой сохранены значения, к примеру простой Мар:
[syntax=java5]
Map.Entry<String, String> item = getItem(position); // это тоже @Override метод в котором вы получаете item
// TODO replace findViewById by ViewHolder
((TextView) result.findViewById(android.R.id.text1)).setText(item.getKey());
((TextView) result.findViewById(android.R.id.text2)).setText(item.getValue());
[/syntax]
это просто простой пример, надеюсь суть понятна, у вас значения должный быть где то сохранены откуда вы и и берете и не важно TextView/ImageView или что то там вью...
После выполнения всех этих манипуляций getView() просто: return result;
![Изображение](http://d379ifj7s9wntv.cloudfront.net/reactivemanifesto/images/ribbons/we-are-reactive-green-right.png)
-
- Сообщения: 33
- Зарегистрирован: 30 сен 2013, 12:14
Re: Listview, simplecursoradapter и button.
altwin писал(а): Я не совсем понял вопроса.. видимо у вас есть предыдущие сообщения... но на сколько я понял вам нужно получить view элементы. Во первых зачем вам SimpleCursorAdapter? почему не BaseAdapter? (следуюет ответить на эотт вопрос для себя, как минимум вы хорошо разберетесь, что это вообще такое...). У вас есть метод getView(), который возвращает то, что будет отображаться. Для начала присвойте значение переменной:
[syntax=java5]
final View result;
if (convertView == null) {
result = LayoutInflater.from(parent.getContext()).inflate(R.layout.listform_item, parent, false);
} else {
result = convertView;
}
[/syntax]
Далее раз у вас есть несколько view элементов, то наверно и какая то структура в которой сохранены значения, к примеру простой Мар:
[syntax=java5]
Map.Entry<String, String> item = getItem(position); // это тоже @Override метод в котором вы получаете item
// TODO replace findViewById by ViewHolder
((TextView) result.findViewById(android.R.id.text1)).setText(item.getKey());
((TextView) result.findViewById(android.R.id.text2)).setText(item.getValue());
[/syntax]
это просто простой пример, надеюсь суть понятна, у вас значения должный быть где то сохранены откуда вы и и берете и не важно TextView/ImageView или что то там вью...
После выполнения всех этих манипуляций getView() просто: return result;
начнем с того что я топикстартер) дальше, я использую именно этот адаптер т.к. исходные данные у меня в БД, предпологается их довольно большое количество и я загружаю их в листвью с помощью cursorloader. остальные вопросы я задал выше.
P.S. огромная просьба всем не советовать в очередной раз использовать другой адаптер, писать другое приложение, идти в детский сад и т.д. я всего лишь хочу разобраться в проблеме и понять как сделать правильно.
Re: Listview, simplecursoradapter и button.
на верном пути, хоть и кривовато сделано но суть понялmechanikos писал(а):что ж попрошу помощи еще раз)
решил я все таки писать свой кастомадаптер унаследованный от simplecursoradapter. надеюсь люди увидят что я не прошу готовое решение а просто совет. вот кодКод: Выделить всё
class MySimpleCursorAdapter extends SimpleCursorAdapter { Context ctx; public MySimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { super(context, layout, c, from, to, flags); this.ctx=context; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView != null) { return convertView; } return LayoutInflater.from(ctx).inflate(R.layout.listform_item, null); } @Override public void bindView(View view, Context context, Cursor cursor) { String name = cursor.getString(cursor.getColumnIndex(DBHelper.FORM_NAME)); String title = cursor.getString(cursor.getColumnIndex(DBHelper.FORM_TITLE)); TextView formname = (TextView) findViewById(R.id.tvFormName); formname.setText(name); TextView formtitle=(TextView) findViewById(R.id.tvFormTitle); formtitle.setText(title); ImageButton yourButton = (ImageButton) findViewById(R.id.ibtnDelete); yourButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(ctx, "Delete button Clicked", Toast.LENGTH_LONG).show() ; } }); } }
к сожалению теперь итемы у меня отображаются но без текста. так же вопрос опять по баттону, на верном ли я пути и как все таки связать его с конкретным id
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена