Как сделать setText в адаптере?

Есть DialogFragment, в который, посредством адаптера, выводится информация из БД. Делаю счетчик для выведенной информации. Т.е. из базы получил число, с помощью + / - изменил число и сохранил в базу. Всё нормально: вывод, изменение, сохранение. Проблема в отображении изменения числа при нажатии + или -. Т.е. что-то не так с setText, а вот что - не вижу. Буду рад любым подсказкам и идеям.

Диалог:
public class DialogGrading extends DialogFragment {
    Cursor c = null;
    private ArrayList<OneCoin_nom> arr_all_descriptions = new ArrayList<>();
    private MyBaseAdapter_grading myBaseAdapter;
    public static final String KEY_ID = "_id";
    ListView listView;
    String coinId;
    private static final String TAG = "-=-=-=-";

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);

        View v = inflater.inflate(R.layout.dialog_grading, container, false);
        myBaseAdapter = new MyBaseAdapter_grading(arr_all_descriptions, getActivity());

        return v;
    }

    @Override
    public void onResume() {
        super.onResume();
        // подключаюсь к БД
        final DatabaseHelper myDbHelper = new DatabaseHelper(getActivity());
        try {
            myDbHelper.createDataBase();
        } catch (IOException ioe) {
            throw new Error("Unable to create database");
        }
        try {
            myDbHelper.openDataBase();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        // таблица БД (соответственно языку локализации)
        final String TABLE_FULL = getResources().getString(R.string.db_table_name);
        final String TABLE_GRADING = getResources().getString(R.string.db_table_grading);
        // получаем id элемента
        coinId = getArguments().getString("coin_id");
        // получаем из БД только одну строку (по id элемента)
        c = myDbHelper.myDataBase.rawQuery("SELECT * FROM " + TABLE_FULL + " NATURAL JOIN " + TABLE_GRADING + " WHERE " + KEY_ID + " = " + coinId + " Limit 1", null);
        if (c.moveToFirst()) {
            do {
                // передаем из БД в адаптер
                OneCoin_nom one_coin = new OneCoin_nom();
                one_coin.setCoinID(c.getString(0));                 // ID
                one_coin.setGradingPRF(c.getString(25));
                arr_all_descriptions.add(one_coin);
            } while (c.moveToNext());
        }

        // инициализация View
        listView = (ListView) getView().findViewById(R.id.grading_listview);
        listView.setAdapter(myBaseAdapter);
    }

    // исключаем дублирование item list при нажатии back из другого activity
    @Override
    public void onStop() {
        super.onStop();
        arr_all_descriptions.clear();
    }

    @Override
    public void onDestroy(){
        super.onDestroy();
        // закрываем подключение
        c.close();
    }

    // перезапуск активности после закрытия диалога (для отображения произошедших изменений)
    public void onDismiss(DialogInterface dialog) {
        super.onDismiss(dialog);
        getActivity().recreate();
        Log.d(TAG, "DialogGrading: onDismiss");
    }
}


Адаптер:
class MyBaseAdapter_grading extends BaseAdapter implements OnClickListener {
    private ArrayList<OneCoin_nom> arr_nominals;
    private Context ctx;
    private LayoutInflater layoutInflater;
    private static final String TAG = "-=-=-=- ";
    private View my_view;
    private TextView grading_PRF;
    private TextView grading_BU;

    MyBaseAdapter_grading(ArrayList<OneCoin_nom> arr_nominals, Context ctx) {
        this.arr_nominals = arr_nominals;
        this.ctx = ctx;
        layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return arr_nominals.size();
    }

    @Override
    public Object getItem(int position) { return arr_nominals.get(position); }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        my_view = convertView;
        if (my_view == null){
            my_view = layoutInflater.inflate(R.layout.list_item_grading, parent, false);
            }
        OneCoin_nom coin = get_one_coin_object(position);

        // ID элемента
        TextView coin_id = (TextView) my_view.findViewById(R.id.coin_id);
        coin_id.setText(coin.getCoinID());

        // значение PRF
        grading_PRF = (TextView) my_view.findViewById(R.id.tv_prf);
        grading_PRF.setText(coin.getGradingPRF());
        my_view.findViewById(R.id.btn_prf_minus).setOnClickListener(this);
        my_view.findViewById(R.id.btn_prf_plus).setOnClickListener(this);

        return my_view;
    }

    private OneCoin_nom get_one_coin_object(int position){
        return arr_nominals.get(position);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_prf_minus: {
                CharSequence tz = qty_PRF.getText();            // объект "надпись", получаем содержание объекта
                if (qty_PRF != null) {
                    int zm = Integer.valueOf(tz.toString());        // превращаем в число
                    if (zm > 0) { zm--; }                           // уменьшаем на 1 (минимальное значение = 0)
                    if (zm == 0) { Toast.makeText(ctx, R.string.grading_min, Toast.LENGTH_SHORT).show(); }
                    //превращаем в срочное значение и возвращаем к объекту "надпись"
                    qty_PRF.setText(String.valueOf(zm));        
                    Log.d(TAG, "PRF = " + tz + " - 1 = " + zm);
                }
            }            
            break;
            case R.id.btn_prf_plus: {
                CharSequence tz = qty_PRF.getText();            // объект "надпись", получаем содержание объекта
                if (qty_PRF != null) {
                    int zp = Integer.valueOf(tz.toString());        // превращаем в число
                    if (zp < 99) { zp++; }                          // увеличиваем на 1 (максимальный значение = 99)
                    if (zp > 98) { Toast.makeText(ctx, R.string.grading_max, Toast.LENGTH_SHORT).show(); }
                    // превращаем в срочное значение и возвращаем к объекту "надпись"
                    qty_PRF.setText(String.valueOf(zp));
                    Log.d(TAG, "PRF = " + tz + " + 1 = " + zp);
                }
            }
            break;
        }
    }
}
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
@xox_ua Автор вопроса
Решил так:
добавляем в case R.id.btn_prf_minus:
Intent intent = new Intent("counter-update");
intent.putExtra("PRF_p", zm);
LocalBroadcastManager.getInstance(ctx).sendBroadcast(intent);


добавляем в case R.id.btn_prf_plus:
Intent intent = new Intent("counter-update");
intent.putExtra("PRF_m", zp);
LocalBroadcastManager.getInstance(ctx).sendBroadcast(intent);


Добавляем в class'е DialogGrading в конец onResume() :
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                TextView qty_PRF = (TextView) listView.findViewById(R.id.tv_prf);
                int new_PRF_p = intent.getIntExtra("PRF_p", 0);
                int new_PRF_m = intent.getIntExtra("PRF_m", 0);
                if (new_PRF_p != 0) { qty_PRF.setText(String.valueOf(new_PRF_p)); }
                if (new_PRF_m != 0) { qty_PRF.setText(String.valueOf(new_PRF_m)); }
            }
        }, new IntentFilter("counter-update"));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
panarama360
@panarama360
Если ты уверен, что число изменяется и setText 100% выполняется, но почему то не изменяется значение, то следует обратить внимание на инициализацию объекта, возможно что ваш TextView ссылается совсем не на тот элемент на который вы смотрите.
Предлагаю сделать Clear проекта.
Возможно вы когда то создавали такой же объект и вскоре его удалили а в файле R он остался.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы