如何从customAdapter类更新活动?

Ger*_*ero 0 android android-adapter android-activity

我有一个带有一些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);        
    }
Run Code Online (Sandbox Code Playgroud)

电话

private View displayStuff(LeDevice dev, int position, View convertView, final ViewGroup parent) {
  if(maxDevice ==null){
       callMethodInMainActivity.java to update a textview()
    }
}
Run Code Online (Sandbox Code Playgroud)

切换到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!!
}
Run Code Online (Sandbox Code Playgroud)

我从UserArrayAdapter调用MainActivity中的方法,并想访问tv_field.这就是我得到例外的地方.如果我通过单击按钮从我的视图中调用相同的方法,它可以工作.

Par*_*oor 5

您可以从适配器发出广播消息,并在"活动"中定义广播接收器以接收此广播.

从适配器发送BROADCAST

Intent i = new Intent("ALERT_CHANGE");
i.putExtra("DATA","News");
sendBroadcast(i);
Run Code Online (Sandbox Code Playgroud)

接收广播活动

    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);
    }
    };
Run Code Online (Sandbox Code Playgroud)

第二种方式

另一种方法是你可以在Activity.Like中拥有textView的静态引用:

public static TextView txt 
txt = (TextView) find...
Run Code Online (Sandbox Code Playgroud)

然后在您的适配器中,您可以引用此txtView,如:

Activity.txt.settext("smthn!");
Run Code Online (Sandbox Code Playgroud)