Android 如何从其他活动更改LinerLayout扩展类中TextView的文本?
我有一个扩展LinearLayout的类。该类中有一个TextView。我需要从另一个活动更改该文本视图的文本。我已经尝试将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
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的值。请共享您的代码?