Как реализовать ListView c EditText в CursorAdapter

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
Zeban
Сообщения: 26
Зарегистрирован: 30 окт 2013, 06:46
Откуда: Благовещенск

Как реализовать ListView c EditText в CursorAdapter

Сообщение Zeban » 04 янв 2015, 18:01

Народ помогите. На 2 недели застрял с проблемой, еще ни с чем так долго не сидел.
Есть кастомный SimpleCursorAdapter, значения для EditText формируются из базы данных. Так же можно изменять значение и оно сразу заноситься в базу.

Все плывет напрочь при прокручивании ListView. Я так понял нужно формировать ссылки на EditText.

Вот код:

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

class TratiSimpleCursorAdapter extends SimpleCursorAdapter { 
Context ctx; 
DataBaseHelper db;
Cursor cursor;

public TratiSimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { 
	super(context, layout, c, from, to, flags); 
	this.ctx=context; 
	this.cursor=c;
} 

@Override 
public void bindView(View view, Context context, Cursor cursor) { 
	
	db = new DataBaseHelper(null);
	db.openDataBase();
	
	String name = cursor.getString(cursor.getColumnIndex(DataBaseHelper.COLUMN_TRATI_NAME)); 
	int stoimost = cursor.getInt(cursor.getColumnIndex(DataBaseHelper.COLUMN_TRATI_STOIMOST)); 
	final int id = cursor.getInt(cursor.getColumnIndex(DataBaseHelper.COLUMN_TRATI_ID)); 
	TextView formname = (TextView) view.findViewById(R.id.tv_organizer_trati_listitem_name); 
	EditText formstoimost = (EditText) view.findViewById(R.id.et_organizer_trati_listitem_info); 
	formname.setText(name); 
	formstoimost.setText("" + stoimost); 
        formstoimost.addTextChangedListener(new TextWatcher() { 
         @Override 
         public void afterTextChanged(Editable s) { 
             // TODO Auto-generated method stub 
             if (!s.toString().isEmpty() && !s.toString().equals("0")) { 
            	// открываем подключение к БД
     			db = new DataBaseHelper(null);
     			db.openDataBase();
     			db.addRecTratiStoimost(id, Integer.parseInt("" + s));
     			Log.d(MainActivity.TAG,"Адаптер курсор: " + id + " Новая стоимость " + s);
             } 
         } 

         @Override 
         public void beforeTextChanged(CharSequence s, 
                 int start, int count, int after) { 
             // TODO Auto-generated method stub 

         } 

         @Override 
         public void onTextChanged(CharSequence s, int start, int before, int count) { 
             // TODO Auto-generated method stub 
         } 

     }); 
db.close();
} 
}
Раньше формировал ссылки на View так:

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

Object obj = cursor.getInt(cursor.getColumnIndex("_id"));
button.setTag(obj);

button.setOnClickListener( new OnClickListener() {
    	@Override
    	public void onClick(View view) {
    		if(view != null) {
    		Object obj = view.getTag();
    		if(obj != null && obj instanceof Integer) {  			
   	    
    		}
    		}
А тут так не получается так как не знаю как получить View.

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

Re: Как реализовать ListView c EditText в CursorAdapter

Сообщение Foenix » 04 янв 2015, 20:07

все с ног н аголову у тебя. Возишься а толку нет? просто возьми урок по этому делу и реализуй по-человечески паттерн, убрав пока совой листенер на едитвью.
R.id.team

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

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Как реализовать ListView c EditText в CursorAdapter

Сообщение KamiSempai » 05 янв 2015, 15:03

EditText в ListView та еще головная боль.
Советую забыть про это и сделать через диалог редактирования при клике по строке.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

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

Re: Как реализовать ListView c EditText в CursorAdapter

Сообщение Foenix » 05 янв 2015, 15:41

ну пусть помучается, что уж там
R.id.team

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

Zeban
Сообщения: 26
Зарегистрирован: 30 окт 2013, 06:46
Откуда: Благовещенск

Re: Как реализовать ListView c EditText в CursorAdapter

Сообщение Zeban » 07 янв 2015, 16:24

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

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

class TratiSimpleCursorAdapter extends SimpleCursorAdapter { 
DataBaseHelper db;

public TratiSimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { 
	super(context, layout, c, from, to, flags); 
} 

@SuppressLint("CutPasteId")
@Override 
public void bindView(View view, Context context, Cursor cursor) { 
	db = new DataBaseHelper(null);
	db.openDataBase();
	
	String name = cursor.getString(cursor.getColumnIndex(DataBaseHelper.COLUMN_TRATI_NAME)); 
	int stoimost = cursor.getInt(cursor.getColumnIndex(DataBaseHelper.COLUMN_TRATI_STOIMOST)); 
	TextView formname = (TextView) view.findViewById(R.id.tv_organizer_trati_listitem_name); 
	EditText formstoimost = (EditText) view.findViewById(R.id.et_organizer_trati_listitem_info); 
	formname.setText(name); 
	formstoimost.setText("" + stoimost); 
       db.close();
} 
}
Так все работает, кроме изменения едиттекст, разумеется.

Только я не пойму как это делу поможет :? Где я не догоняю?

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

Re: Как реализовать ListView c EditText в CursorAdapter

Сообщение Foenix » 07 янв 2015, 16:47

все неправильно
R.id.team

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

Zeban
Сообщения: 26
Зарегистрирован: 30 окт 2013, 06:46
Откуда: Благовещенск

Re: Как реализовать ListView c EditText в CursorAdapter

Сообщение Zeban » 14 янв 2015, 16:38

KamiSempai писал(а):EditText в ListView та еще головная боль.
Советую забыть про это и сделать через диалог редактирования при клике по строке.
Спасибо, сделал по твоему совету)

Ответить