Не удается обновить TextView из другого класса - PullRequest
0 голосов
/ 18 февраля 2020

Мой android проект имеет 3 класса MainActivity. java, itemlist. java и Bill. java

Я создал объект класса Bill из itemlist. java class и передал контекст оттуда. Поэтому, когда я пытаюсь обновить текстовое представление из класса Билла. java, оно просто не обновляется, но когда я делаю то же самое из MainActivity, оно работает

Так что мой вопрос, как заставить это обновление TextView работать?

package com.example.smit.databasedemo.Functions;

import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

import com.example.smit.databasedemo.MainActivity;
import com.example.smit.databasedemo.R;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by Smit on 18-02-2020.
 */


public class Bill extends AppCompatActivity{
    private LayoutInflater inflater;
    private final View view;


    public Bill(Context context){
        inflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.activity_main,null);
    }

Здесь контекст передается с помощью getApplicationContext (), переданного из MainActivity

    public void calculate(String bill){

        final TextView billText = (TextView) view.findViewById(R.id.useless);

        String text = (billText.getText().toString())+bill;
        //Here the text is fetched from same textbox but fail's to update
        Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher(text);
        String[] amount= new String[2];
        int i=0;
        while(m.find()){
            amount[i] = m.group();
            i++;
        }
        int amount_prev = Integer.valueOf(amount[0]);
        final int total = (amount_prev)+(Integer.valueOf(amount[1]));
        billText.setText("Total Bill:"+total+"Rs");
        //Cannot update this textbox



    }

}

final Bill bill = new Bill(context);

//this is how its called
public void onClick(View v) {
                        counter++;
                        price= (finalViewHolder.price.getText().toString());
                        finalViewHolder.item.setText(String.valueOf(counter));
                        bill.calculate(price);

                    }

ps при попытке выполнить на uiThread () не работает

1 Ответ

0 голосов
/ 18 февраля 2020

Вы должны передать ссылку на контекст через конструктор:

public Bill(Context context){
    this.context=context;
//rest of your code...

}

Также найдите TextView следующим образом:

TextView billText = (TextView) ((Activity)context).findViewById(R.id.useless);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...