powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / LoaderManager
17 сообщений из 17, страница 1 из 1
LoaderManager
    #38810166
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю, как правильно озаглавить тему.

Вопрос такой.
Есть класс
Код: java
1.
public class ActivityReferences extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor> {



В котором создаётся и выводится в ListVew таблица-справочник из базы.
Но т.к. справочников больше одного, то есть желание в одной форме их всех отображать на разных закладках.
Вывод одного я сделал. Сейчас я пытаюсь второй вывести. И тут столкнулся с проблемой

@Override
onLoadFinished

@Override
onLoaderReset

где используется конкретный адаптер

Код: java
1.
2.
3.
4.
    @Override
    public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
        scAdapterProducts.swapCursor(cursor);
    }



а у меня их два адаптера, т.к. два справочника


И ещё вопрос:
Код: java
1.
getSupportLoaderManager().initLoader(0, null, this);


0 - первый параметр - это что? Что туда можно передать? И где использовать?*


и ещё вопрос:
Код: java
1.
2.
3.
4.
5.
6.
7.
    @Override
    public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
        Log.d("Loader<Cursor> onCreateLoader", String.valueOf(i));
        if (i == 0 ) return new MyCursorLoaderProducts(this, DB);
        if (i == 1 ) return new MyCursorLoaderPayment(this, DB);
        return null;
    }


можно ли как-то в onCreateLoader создавать тот или иной экземпляр класса?


Я, на всякий случай, приложу весь код

обещайте громко не смеяться
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
package akl.clients;

import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SimpleCursorAdapter;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ListView;


public class ActivityReferences extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor> {

    static DataBaseHelper DB;
    ListView lvProducts;
    ListView lvPayments;
    static SimpleCursorAdapter scAdapterProducts;
    static SimpleCursorAdapter scAdapterPayments;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_references);

        DB = new DataBaseHelper(this);
        DB.openDataBase();

        lvProducts = (ListView) findViewById(R.id.lvProducts);
        LoadProducts();

        lvPayments = (ListView) findViewById(R.id.lvPayments);
        LoadPayments();
    }

    public void LoadProducts() {
        String[] from = new String[] { DataBaseHelper.col_ref_payment_id, DataBaseHelper.col_ref_payment, DataBaseHelper.col_ref_payment_remark };
        int[] to = new int[] { R.id.tvPaymentId, R.id.tvPaymentName, R.id.tvPaymentRemark };

        scAdapterPayments = new SimpleCursorAdapter(this, R.layout.item_payment, null, from, to, 0);
        scAdapterPayments.setViewBinder(new MyViewBinderProduct());
        lvPayments.setAdapter(scAdapterPayments);

        getSupportLoaderManager().initLoader(0, null, this);
    }

    public void LoadPayments() {
        String[] from = new String[] { DataBaseHelper.col_ref_product_id, DataBaseHelper.col_ref_product_name, DataBaseHelper.col_ref_product_description, DataBaseHelper.col_ref_product_is_net_lic, DataBaseHelper.col_ref_product_art, DataBaseHelper.col_ref_product_remark, DataBaseHelper.col_ref_product_is_corp_lic };
        int[] to = new int[] { R.id.tvProductId, R.id.tvProductName, R.id.tvProductDescription, R.id.checkProductNetwork, R.id.tvProductArticle, R.id.tvProductRemark, R.id.checkProductCorp };

        scAdapterProducts = new SimpleCursorAdapter(this, R.layout.item_product, null, from, to, 0);
        lvProducts.setAdapter(scAdapterProducts);

        //registerForContextMenu(lvData);
        getSupportLoaderManager().initLoader(1, null, this);
    }

    class MyViewBinderProduct implements SimpleCursorAdapter.ViewBinder{

        CheckBox cb;

        @Override
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {

            if (view.getId() == R.id.checkProductNetwork) {
                cb = (CheckBox) view.findViewById(R.id.checkProductNetwork);
                cb.setChecked(cursor.getInt(columnIndex) != 0);
                return true;
            }
            if (view.getId() == R.id.checkProductCorp) {
                cb = (CheckBox) view.findViewById(R.id.checkProductCorp);
                cb.setChecked(cursor.getInt(columnIndex) != 0);
                return true;
            }
            return false;
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_activity_references, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
        Log.d("Loader<Cursor> onCreateLoader", String.valueOf(i));
        if (i == 0 ) return new MyCursorLoaderProducts(this, DB);
        if (i == 1 ) return new MyCursorLoaderPayment(this, DB);
        return null;
    }

    @Override
    public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
        scAdapterProducts.swapCursor(cursor);
    }

    @Override
    public void onLoaderReset(Loader<Cursor> cursorLoader) {
    }

    static class MyCursorLoaderProducts extends CursorLoader {
        DataBaseHelper db;

        public MyCursorLoaderProducts(Context context, DataBaseHelper db) {
            super(context);
            this.db = db;
        }

        @Override
        public Cursor loadInBackground() {
            return db.getProductsData();
        }
    }

    static class MyCursorLoaderPayment extends CursorLoader {
        DataBaseHelper db;

        public MyCursorLoaderPayment(Context context, DataBaseHelper db) {
            super(context);
            this.db = db;
        }

        @Override
        public Cursor loadInBackground() {
            return db.getPaymentsData();
        }
    }

}

...
Рейтинг: 0 / 0
LoaderManager
    #38810170
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или мне просто нужно в другом файле создавать новый класс
Код: java
1.
public class ActivityReferences extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor> {


?
...
Рейтинг: 0 / 0
LoaderManager
    #38810422
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X110 - первый параметр - это что? Что туда можно передать? И где использовать?*

ID для лоадера, ты же несколько курсоров можешь вытащить.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
private ststic final int LOADER_1 = 0;
private ststic final int LOADER_2 = 1;
....
getSupportLoaderManager().initLoader(LOADER_1 , null, this);
getSupportLoaderManager().initLoader(LOADER_2 , null, this);

 @Override
    public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
        Log.d("Loader<Cursor> onCreateLoader", String.valueOf(i));
        if (i == LOADER_1 ) return new MyCursorLoaderProducts(this, DB);
        if (i == LOADER_2 ) return new MyCursorLoaderPayment(this, DB);
        return null;
    }

....
  public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
            
        switch(cursorLoader.getId())
       {
       case LOADER_1:
        scAdapterProducts.swapCursor(cursor);
        break;

       case LOADER_2:
         ...
        break;

    }
...
Рейтинг: 0 / 0
LoaderManager
    #38810439
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
В общем-то да, я так и предполагал, только до ума не смог довести. И нигде не нашёл подтверждения тому, что первый параметр в initLoader(LOADER_1 , null, this) - это номер курсора. Во всех примерах, что встречал, тупо 0 ставили без объяснения, что это и для чего.

Вообще, некоторые более сложные обучающие примеры объяснены процентов на 40-50. Просто новичку не въехать в это с первого раза или даже с 10-го. А также там выкладывают простой код, который в жизни и не пригодится.
...
Рейтинг: 0 / 0
LoaderManager
    #38810448
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вообще то, если в офф. справке почитать про методы, то там все написано.
...
Рейтинг: 0 / 0
LoaderManager
    #38810510
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
даааа? тогда зачем форумы, книги, примеры, зачем?
...
Рейтинг: 0 / 0
LoaderManager
    #38810561
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11даааа? тогда зачем форумы, книги, примеры, зачем?
Это все есть для разных уровней пользователей. Ищи уровень для детского сада. А ты сразу в дебри лезешь для профи - зачем тебе вообще фреймы экшен бары и прочая продвинутая хрень, люди пишут прекрасные приложения вообще без этого и вообще вопросов не задают - так как в инете уже все достаточно разжевано и есть куча примеров.
Кто ищет - тот всегда найдет - иное дело если не знаешь как сформулировать поисковый запрос - тогда тебе тут всегда подскажут.
...
Рейтинг: 0 / 0
LoaderManager
    #38810586
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийИщи уровень для детского сада.

я ж написал:

X11И нигде не нашёл подтверждения тому, что первый параметр в initLoader(LOADER_1 , null, this) - это номер курсора. Во всех примерах, что встречал, тупо 0 ставили без объяснения, что это и для чего.

Вообще, некоторые более сложные обучающие примеры объяснены процентов на 40-50. Просто новичку не въехать в это с первого раза или даже с 10-го. А также там выкладывают простой код, который в жизни и не пригодится.

такого уровня нет нигде
...
Рейтинг: 0 / 0
LoaderManager
    #38810601
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11, этого действительно нет во встроенном хелпе... Но на сайте есть описание
http://developer.android.com/intl/ru/reference/android/app/LoaderManager.html
авторid A unique identifier for this loader. Can be whatever you want. Identifiers are scoped to a particular LoaderManager instance.
...
Рейтинг: 0 / 0
LoaderManager
    #38810658
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Микола ПитерскийИщи уровень для детского сада.
такого уровня нет нигде

Я сам начинающий анроидовод - уже написал штуки 3 приложения по работе с БД, но даже не слышал что такое LoaderManager, и вроде как твоя идея - все справочники в одной активности совсем не хороша.

Курсы для чайников тоже есть - ищи "Виноградов сборник уроков".

вот это все тоже лучше выбросить и пока не использовать :
android.support.v4.app
FragmentActivity;
...
Рейтинг: 0 / 0
LoaderManager
    #38810666
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийLoaderManager

эта штуку сделали , что бы уйти от AsyncTask, да и она уже не боится пересоздания активностей, фрагментов.
...
Рейтинг: 0 / 0
LoaderManager
    #38810668
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола Питерскийвот это все тоже лучше выбросить и пока не использовать :
android.support.v4.app
FragmentActivity;

лучше сразу вникать во фрагменты.
жизненные циклы с ними.
...
Рейтинг: 0 / 0
LoaderManager
    #38810684
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanX11, этого действительно нет во встроенном хелпе... Но на сайте есть описание
http://developer.android.com/intl/ru/reference/android/app/LoaderManager.html
авторid A unique identifier for this loader. Can be whatever you want. Identifiers are scoped to a particular LoaderManager instance.

а слона-то я и не заметил
...
Рейтинг: 0 / 0
LoaderManager
    #38810808
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДжибсМикола Питерскийвот это все тоже лучше выбросить и пока не использовать :
android.support.v4.app
FragmentActivity;

лучше сразу вникать во фрагменты.
жизненные циклы с ними.
Самое интересное - что я очень внимательно изучил фрагменты - с целью "а что они могут дать такого хорошего кроме усложнения кода"? Да - круто что можно динамически подгрузить любой фрагмент(ы) в контейнер(а) активности, круто что часть кода из активности можно перенести в сам фрагмент, круто что диалоговые окна на основе фрагментов при повороте устройства не теряются. Только вроде как без этого вполне можно обойтись и писать приложение размером до 200Кб.
Может я и не прав, а просто заблуждаюсь или не вижу того что видят другие и понимание необходимости использования фрагментов придет попозже. Но сейчас пока твердо убежден - нафик они не сдались:)
В предыдущем приложении я вот в одной активности делал вывод данных в ListView а редактирование, добавление записи оформлял в виде диалогового окна, вроде было красиво и круто покрайней мере похожее делал раньше в делфи, но посмотрел приложения от гугла в частности звонилку и понял что нафик такое не надо - счас делаю приложение в котором диалоговые окна только для вывода сообщения а все прочие действия делаю в новой активности. Чем проще - тем лучше и БЫСТРЕЕ !!!
А может я и не прав - тогда поправьте пожалуйста.
...
Рейтинг: 0 / 0
LoaderManager
    #38810811
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну. нужно понимать, что все зависит от задач.

например, интерфейс, для мобилки и планшета, мне сложно приумать как бы я сделал без фрагментов
...
Рейтинг: 0 / 0
LoaderManager
    #38810821
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джибс, да - так и получается что я делаю приложения именно для смартфонов, если бы я ориентировался в первую очередь на планшеты - то скорее всего фрагменты и подошли бы - ведь круто когда слева менюшка в виде вертикального столбика кнопок, а справа открываются какие-то данные, чего не всунуть на смарт.
...
Рейтинг: 0 / 0
LoaderManager
    #38810961
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДжибсМикола ПитерскийLoaderManager

эта штуку сделали , что бы уйти от AsyncTask, да и она уже не боится пересоздания активностей, фрагментов.

Спасибо большое - а то я хотел уже в скором времени обертку свою писать для работы с базой, а то пока все в основном потоке происходит, но записей менее 1000 так что пока не тормозит.

А тут оказывается такой велосипед уже есть !!! :)
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Android [игнор отключен] [закрыт для гостей] / LoaderManager
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]