如何从customAdapter类更新活动?

时间:2014-06-30 13:08:33

标签: android android-activity android-adapter

我有一个带有一些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。这就是我得到例外的地方。如果我通过单击按钮从我的视图中调用相同的方法,它就会起作用。

2 个答案:

答案 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);

}

在要反映数据的类中实现它。