Re: Урок 136. CursorLoader
Добавлено: 13 окт 2015, 17:44
ViewPager, Glide.
Добро пожаловать на форум сайта
http://forum.startandroid.ru/
Код: Выделить всё
cursor = db.readyDB("auto", null, selection, selectionArgs, null, null, null);
userAdapter = new SimpleCursorAdapter(this, R.layout.auto, cursor, fromStr, toInt, 0);
dialog.show(getFragmentManager(), "dialog");
Код: Выделить всё
public class auto extends DialogFragment implements OnClickListener {
final String LOG_TAG = "myLogs";
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getDialog().setTitle(R.string.auto);
View view = inflater.inflate(R.layout.auto, null);
return view;
}
Передать выборку в диалог, даже более точнее - cursor.Foenix писал(а):а никак. Создавать адаптер нужно по уроку прямо в диалоге, если тебе там нужен список. !передать бд" в диалог - как-то неправильно звучит.
т.е. мне в auto.jave создавать запрос к БД и т.д.?Foenix писал(а):все делается аналогично активити, только в фрагменте диалога.
Код: Выделить всё
db = new DB(this, null);
db.open();
// формируем столбцы сопоставления
String[] from = {"fio", "adr", "prich", "datr", "p_u"};
int[] to = new int[] { R.id.tvText1, R.id.tvText2, R.id.tvText3, R.id.tvText4, R.id.tvText5 };
// создаем адаптер и настраиваем список
scAdapter = new SimpleCursorAdapter(this, R.layout.fio_item, null, from, to, 0);
scAdapter.setViewBinder(new MyViewBinder());
lvData = (ListView) findViewById(R.id.lvData);
lvData.setAdapter(scAdapter);
// создаем лоадер для чтения данных
getSupportLoaderManager().initLoader(0, null, this);
Код: Выделить всё
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
Код: Выделить всё
import android.content.CursorLoader;
import android.content.Loader;
используя контент провайдер посылай нотифай там именно тому набору данных, который выбирается в листвью. Тогда оно само обновится и не нужно будет рестартовать лоадер, что неправильно.yume писал(а):Доброго времени суток.
Есть такая задача: содержимое тоже, что и в уроке 136, но имеются две кнопки, при нажатии на которые меняется база данных. Как обновить содержимое listView? Так как при нажатии, допустим, на вторую кнопку (к ней привязана бд, но не та, которая грузиться по дефолту), добавляется запись в эту, вторую бд, однако в listView данные остаются от первой таблицы, которая загружается по дефолту.
upd: getSupportLoaderManager().restartLoader().
Спасибо.Foenix писал(а):используя контент провайдер посылай нотифай там именно тому набору данных, который выбирается в листвью. Тогда оно само обновится и не нужно будет рестартовать лоадер, что неправильно.
Запрос поправитьyume писал(а):
Ещё такой вопрос: как выводить список таким образом, чтобы добавленные записи были вверху, а не снизу?
Код: Выделить всё
public Cursor getAllData() {
return mDB.query(TABLE, null, null, null, null, null, "_id DESC");//null
}
Для этого и для других вещей всегда обычно в таблице завожу поле с датой создания/редактирования записи. Потом по нему сортируй, например, и все.yume писал(а):Спасибо.Foenix писал(а):используя контент провайдер посылай нотифай там именно тому набору данных, который выбирается в листвью. Тогда оно само обновится и не нужно будет рестартовать лоадер, что неправильно.
Ещё такой вопрос: как выводить список таким образом, чтобы добавленные записи были вверху, а не снизу?
Кошки Рулят писал(а):Запрос поправитьКод: Выделить всё
public Cursor getAllData() { return mDB.query(TABLE, null, null, null, null, null, "_id DESC");//null }
Благодарю!Foenix писал(а):Для этого и для других вещей всегда обычно в таблице завожу поле с датой создания/редактирования записи. Потом по нему сортируй, например, и все.
Код: Выделить всё
class TmpSimpleCursorAdapter extends SimpleCursorAdapter {
public TmpSimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {
super(context, layout, c, from, to, flags);
}
@Override
public View newView(Context _context, Cursor _cursor, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) _context.getSystemService(_context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.row_item_temperature, parent, false);
return view;
}
@Override
public void bindView(View view, Context Context, final Cursor cursor) {
String title = cursor.getString(cursor.getColumnIndex(DBTemperature.COLUMN_TITLE));
roomTitleTmp = (TextView) view.findViewById(R.id.roomTitleTmp);
roomTitleTmp.setText(title);
temperature = (TextView) view.findViewById(R.id.roomTemperature);
adjust = (TextView) view.findViewById(R.id.adjustTemperature);
SeekBar seekBar = (SeekBar) view.findViewById(R.id.seekBar);
adjust.setText("+" + seekBar.getProgress());
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progress = 0;
@Override
public void onProgressChanged(SeekBar seekBar, int progressValue, boolean fromUser) {
progress = progressValue;
adjust.setText("+" + progress);
Log.d(MEGA, "Progress Changed");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
Log.d(MEGA, "Progress Started");
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Log.d(MEGA, "Progress Stopped");
}
});
}
}
Код: Выделить всё
public class FragmentTemperatureDB extends Fragment implements LoaderCallbacks<Cursor> {
ListView lvTemperature;
DBTemperature dbHelperTmp;
SimpleCursorAdapter dataAdapterTmp;
int LIST_TMP_ID = 0;
ActionMode tmpActionMode;
private int operatePosition = 0;
final static String MEGADOR = "megadr";
public FragmentTemperatureDB() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View vTemperatures = inflater.inflate(R.layout.fragment_thermal, container, false);
// Initialize data for ListView
dbHelperTmp = new DBTemperature(FragmentTemperatureDB.this.getActivity());
dbHelperTmp.open();
String[] from = new String[] { DBTemperature.COLUMN_TITLE,
DBTemperature.COLUMN_CURRENT_TEMP,
DBTemperature.COLUMN_ADJUST_TEMP};
int[] to = new int[] { R.id.roomTitleTmp,
R.id.roomTemperature,
R.id.adjustTemperature};
// Setup Adapter for ListView
dataAdapterTmp = new SimpleCursorAdapter(FragmentTemperatureDB.this.getActivity(),
R.layout.row_item_temperature, null, from, to, LIST_TMP_ID);
dataAdapterTmp.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
if (columnIndex == cursor.getColumnIndex(DBTemperature.COLUMN_ADJUST_TEMP)) {
int adjustProgress = cursor.getInt(columnIndex);
SeekBar seekBar = (SeekBar) view.findViewById(R.id.seekBar);
((TextView) view).setText("++" + adjustProgress);
seekBar.setProgress(adjustProgress);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progressValue, boolean fromUser) {
((TextView) view).setText("+" + progressValue);
Log.d(MEGADOR, "Progress Changed: " + "+" + progressValue);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
Log.d(MEGADOR, "Progress Started:");
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Log.d(MEGADOR, "Progress Stopped");
}
});
return true;
}
return false;
}
});
lvTemperature = (ListView) vTemperatures.findViewById(R.id.temperatureListView);
lvTemperature.setAdapter(dataAdapterTmp);
setHasOptionsMenu(true);
lvTemperature.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long id) {
operatePosition = pos;
tmpActionMode = FragmentTemperatureDB.this.getActivity().startActionMode(new ActionBarCallBack());
return true;
}
});
// Make loader for getting data
getLoaderManager().initLoader(LIST_TMP_ID, null, this);
// Inflate the layout for this fragment
return vTemperatures;
}
Код: Выделить всё
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.SeekBar.setProgress(int)' on a null object reference
at com.gigavar.adkmegador01.FragmentTemperatureDB$1.setViewValue(FragmentTemperatureDB.java:67)
Код: Выделить всё
seekBar.setProgress(adjustProgress);
Код: Выделить всё
// ((TextView) view).setText("+" + progressValue);
Код: Выделить всё
static class ViewHolder {
TextView roomTitleTmp;
TextView adjust;
TextView temperature;
SeekBar seekBar;
}
Код: Выделить всё
viewHolder.adjust = (TextView) ((View)seekBar.getParent()).findViewById(R.id.adjustTemperature);
Код: Выделить всё
class TmpSimpleCursorAdapter extends SimpleCursorAdapter {
public TmpSimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {
super(context, layout, c, from, to, flags);
}
ViewHolder viewHolder;
@Override
public View newView(Context _context, Cursor _cursor, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) _context.getSystemService(_context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.row_item_temperature, parent, false);
return view;
}
@Override
public void bindView(View view, Context Context, final Cursor cursor) {
String title = cursor.getString(cursor.getColumnIndex(DBTemperature.COLUMN_TITLE));
viewHolder = new ViewHolder();
viewHolder.roomTitleTmp = (TextView) view.findViewById(R.id.roomTitleTmp);
viewHolder.roomTitleTmp.setText(title);
viewHolder.temperature = (TextView) view.findViewById(R.id.roomTemperature);
viewHolder.adjust = (TextView) view.findViewById(R.id.adjustTemperature);
viewHolder.seekBar = (SeekBar) view.findViewById(R.id.seekBar);
viewHolder.adjust.setText("+" + viewHolder.seekBar.getProgress());
viewHolder.seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progressValue, boolean fromUser) {
viewHolder.adjust = (TextView) ((View)seekBar.getParent()).findViewById(R.id.adjustTemperature);
viewHolder.adjust.setText("+" + progressValue);
Log.d(MEGA, "Progress Changed");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
Log.d(MEGA, "Progress Started");
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Log.d(MEGA, "Progress Stopped");
}
});
}
}
Код: Выделить всё
sv = (android.widget.SearchView) findViewById(R.id.action_search);
sv.setOnQueryTextListener(new android.widget.SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
scAdapter.getFilter().filter(newText);
return false;
}
});