Android 如何从其他活动更改LinerLayout扩展类中TextView的文本?

Android 如何从其他活动更改LinerLayout扩展类中TextView的文本?,android,android-linearlayout,Android,Android Linearlayout,我有一个扩展LinearLayout的类。该类中有一个TextView。我需要从另一个活动更改该文本视图的文本。我已经尝试将TextView对象声明为公共静态。但它不起作用。请帮我做这件事 这是我的代码: package com.briscommunications.bris.ui; import android.app.Activity; import android.content.Context; import android.content.res.TypedArray; import

我有一个扩展LinearLayout的类。该类中有一个TextView。我需要从另一个活动更改该文本视图的文本。我已经尝试将TextView对象声明为公共静态。但它不起作用。请帮我做这件事

这是我的代码:

package com.briscommunications.bris.ui;

import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.AsyncTask;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.briscommunications.bris.R;
import com.briscommunications.bris.GlobalVariables;
import com.briscommunications.bris.LinphonePreferences;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Timer;
import java.util.TimerTask;

/**
 * @author Guillaume Beraudo
 *
 */
public class Numpad extends LinearLayout implements AddressAware {
    private boolean mPlayDtmf;
    public void setPlayDtmf(boolean sendDtmf) {
        this.mPlayDtmf = sendDtmf;
    }

    public static Handler handler = new Handler();
    Timer timer = new Timer();
    public static TextView txtBalance;
    public static Context objNumpadContext;
    public static Activity objNumpadAct;

    public Numpad(Context context, boolean playDtmf) {
        super(context);
        mPlayDtmf = playDtmf;
        LayoutInflater.from(context).inflate(R.layout.numpad, this);
        setLongClickable(true);
        onFinishInflate();
    }

    public static void ShowBalance(){
        try {
            LinphonePreferences mPrefs = LinphonePreferences.instance();
            int defaultAccountID = mPrefs.getDefaultAccountIndex();
            GlobalVariables.UserName = mPrefs.getAccountUsername(defaultAccountID);
        }
        catch (Exception e){
            GlobalVariables.UserName ="";
        }
        new getBalance_actMain().execute();
    }

    public Numpad(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Numpad);
        mPlayDtmf = 1 == a.getInt(R.styleable.Numpad_play_dtmf, 1);
        a.recycle();
        LayoutInflater.from(context).inflate(R.layout.numpad, this);
        setLongClickable(true);


        txtBalance = (TextView) findViewById(R.id.txtBalance);
        objNumpadContext = getContext();
        objNumpadAct = (Activity) objNumpadContext;

        ShowBalance();

        /*
        TimerTask doAsynchronousTask = new TimerTask() {
            @Override
            public void run() {

                //Perform background work here

                handler.post(new Runnable() {
                    public void run() {

                    }
                });
            }
        };
        timer.schedule(doAsynchronousTask, 10, 5000);*/
    }

    @Override
    protected final void onFinishInflate() {
        for (Digit v : retrieveChildren(this, Digit.class)) {
            v.setPlayDtmf(mPlayDtmf);
        }
        super.onFinishInflate();
    }
    public void setAddressWidget(AddressText address) {
        for (AddressAware v : retrieveChildren(this, AddressAware.class)) {
            v.setAddressWidget(address);
        }
    }


    private final <T> Collection<T> retrieveChildren(ViewGroup viewGroup, Class<T> clazz) {
        final Collection<T> views = new ArrayList<T>();

        for (int i = 0; i < viewGroup.getChildCount(); i++) {
            View v = viewGroup.getChildAt(i);
            if (v instanceof ViewGroup) {
                views.addAll(retrieveChildren((ViewGroup) v, clazz));
            } else {
                if (clazz.isInstance(v))
                    views.add(clazz.cast(v));
            }
        }

        return views;
    }

    public static class getBalance_actMain extends AsyncTask {
        String usrBal="Fetching Balance";
        @Override
        protected Object doInBackground(Object[] params) {
            try {
                HttpClient client=new DefaultHttpClient();
                HttpGet request=new HttpGet("some_url");
                HttpResponse response=client.execute(request);

                HttpEntity entity=response.getEntity();
                usrBal = EntityUtils.toString(entity);

                entity.consumeContent();
            } catch (ClientProtocolException e) {
                usrBal = "FALSE";
            } catch (IOException e) {
                usrBal = "FALSE";
            }
            return null;
        }

        @Override
        protected void onPostExecute(Object o) {
            if (usrBal.equals("FALSE")){
                txtBalance.setText("--.--");
                return;
            }

            //txtBalance.setText(usrBal);
            com.briscommunications.bris.ui.Numpad.txtBalance.setText(usrBal);

        }
    }

}
package com.briscommunications.bris.ui;
导入android.app.Activity;
导入android.content.Context;
导入android.content.res.TypedArray;
导入android.os.AsyncTask;
导入android.os.Handler;
导入android.util.AttributeSet;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.LinearLayout;
导入android.widget.TextView;
导入com.briscommunications.bris.R;
导入com.briscommunications.bris.GlobalVariables;
导入com.briscommunications.bris.linphone首选项;
导入org.apache.http.HttpEntity;
导入org.apache.http.HttpResponse;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.methods.HttpGet;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.util.EntityUtils;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.Collection;
导入java.util.Timer;
导入java.util.TimerTask;
/**
*@作者纪尧姆·贝劳多
*
*/
公共类Numpad扩展LinearLayout实现AddressAware{
专用布尔mPlayDtmf;
公共void setPlayDtmf(布尔sendDtmf){
this.mPlayDtmf=sendDtmf;
}
公共静态处理程序=新处理程序();
定时器=新定时器();
公共静态文本视图txtBalance;
公共静态上下文objNumpadContext;
公共静态活动对象;
公共Numpad(上下文,布尔playDtmf){
超级(上下文);
mPlayDtmf=playDtmf;
从(上下文)充气(R.layout.numpad,this);
setLongClickable(真);
充气();
}
公共静态void ShowBalance(){
试一试{
LinphonePreferences mPrefs=LinphonePreferences.instance();
int defaultAccountID=mPrefs.getDefaultAccountIndex();
GlobalVariables.UserName=mPrefs.getAccountUsername(defaultAccountID);
}
捕获(例外e){
GlobalVariables.UserName=“”;
}
新建getBalance_actMain().execute();
}
公共Numpad(上下文、属性集属性){
超级(上下文,attrs);
TypedArray a=context.getainstyledattributes(attrs,R.styleable.Numpad);
mPlayDtmf=1==a.getInt(R.styleable.Numpad\u play\u dtmf,1);
a、 回收();
从(上下文)充气(R.layout.numpad,this);
setLongClickable(真);
txtBalance=(TextView)findViewById(R.id.txtBalance);
objNumpadContext=getContext();
objNumpadAct=(活动)objNumpadContext;
ShowBalance();
/*
TimerTask doAsynchronousTask=新TimerTask(){
@凌驾
公开募捐{
//在此执行背景工作
handler.post(新的Runnable(){
公开募捐{
}
});
}
};
时间表(doAsynchronousTask,105000)*/
}
@凌驾
受保护的最终空隙膨胀(){
for(数字v:retrieveChildren(this,Digit.class)){
v、 设置播放DTMF(mPlayDtmf);
}
超级充气();
}
公共无效setAddressWidget(AddressText地址){
for(AddressAware v:retrieveChildren(this,AddressAware.class)){
v、 setAddressWidget(地址);
}
}
private final Collection retrieveChildren(视图组、视图组、类类别){
最终集合视图=新建ArrayList();
对于(int i=0;i
我正在从另一个活动调用静态ShowBalance()函数


提前感谢。

据我所知,由于主线程(UI线程)的限制,无法直接从一个活动更改另一个活动中的文本


稍后尝试将所需的值存储在公共变量中,然后在其他活动中,在onResume()或onOpen()中,使用公共变量中存储的值更新editText的值。

请共享您的代码?