我有一个带有一些textview和listview的用户界面。如果CustomAdapter类中出现特定的内容,我想更新我的textviews。我的CustomAdapter类中的一个事件将触发MyActivity类的更改。
listview从json获取数据,该json是从服务器获取的。现在假设json只包含数字,这些数字在listview中是监听的。工作良好。我计算了最大数量,但是我无法更新我的textview,它会显示最大数量。
我得到NullPointerException
。如何保持该对象引用?
UserArrayAdapter.java
public View getView(final int position, final View convertView, final ViewGroup parent) {
return displayStuff(dev, position, convertView, parent);
}
呼叫
private View displayStuff(LeDevice dev, int position, View convertView, final ViewGroup parent) {
if(maxDevice ==null){
callMethodInMainActivity.java to update a textview()
}
}
切换到MainActivity.java
Textview tv_field;
public void callMethodInMainActivity.java to update a textview(){
tv_field = (TextView)findViewById(R.id.tv_maxNumber);
tv_field.setText(42); //!!NullPointer!!
}
我从UserArrayAdapter调用MainActivity中的方法,并想访问tv_field。这就是我得到例外的地方。如果我通过单击按钮从我的视图中调用相同的方法,它就会起作用。
答案 0 :(得分:5)
您可以从适配器发出广播消息,并在“活动”中定义广播接收器以接收此广播。
发送广播 - 来自适配器
Intent i = new Intent("ALERT_CHANGE");
i.putExtra("DATA","News");
sendBroadcast(i);
接收广播活动
registerReceiver(uiUpdated, new IntentFilter("ALERT_CHANGE"));
private BroadcastReceiver uiUpdated= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent)
{
String DATA = i.getStringExtra("Data");
txt.settext(DATA);
}
};
第二种方式
另一种方法是你可以在Activity.Like中使用textView的静态引用:
public static TextView txt
txt = (TextView) find...
然后在您的适配器中,您可以引用此txtView,如:
Activity.txt.settext("smthn!");
答案 1 :(得分:0)
您可以使用回调来实现相同的目标。
public interface Callback {
void onSuccess(String status);
void onFailure(String status);
}
在要反映数据的类中实现它。