Java 如何更新在其他类的活动窗体中找到的文本视图
主要活动类Java 如何更新在其他类的活动窗体中找到的文本视图,java,android,android-activity,Java,Android,Android Activity,主要活动类 public class MainActivity extends Activity { TextView textupdate; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textupdate = findVie
public class MainActivity extends Activity {
TextView textupdate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textupdate = findViewById(R.id.textView1);
MediaPlayerclass mpclass = MediaPlayerclass(getApplicationContext());
mpclass.MediaPlayer_Start(R.raw.track1);
}
public void mUpdateCountv() {
System.out.println("textupdate "textupdate); //Returns null from MediaPlayerclass
textupdate.setText("MpCompleted");
}
Mediaplayerclass
public class MediaPlayerclass {
private Context mContext = null;
private int mResId = 0;
MainActivity mainactivity;
public MediaPlayer mCurrentPlayer = null;
public MediaPlayerclass(Context context) {
this.mContext = context;
mainactivity = new MainActivity();
}
public void MediaPlayer_Start(int resId) {
this.mResId = resId;
mCurrentPlayer = MediaPlayer.create(mContext, mResId);
mCurrentPlayer.setOnCompletionListener(onCompletionListener);
mCurrentPlayer.start();
}
public MediaPlayer.OnCompletionListener onCompletionListener = new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mCurrentPlayer.release();
//Textview Update
mainactivity.mUpdateCountv();
}
};
日志
05-01 13:00:48.258:E/AndroidRuntime(5599):致命异常:主
05-01 13:00:48.258:E/AndroidRuntime(5599):过程:
com.example.media,PID:5599
05-01 13:00:48.258:E/AndroidRuntime(5599):
java.lang.NullPointerException:尝试调用虚拟方法“void”
空值上的android.widget.TextView.setText(java.lang.CharSequence)“”
对象引用
05-01 13:00:48.258:E/AndroidRuntime(5599):在
com.example.media.MainActivity.mUpdateCountv(MainActivity.java:665)
05-01 13:00:48.258:E/AndroidRuntime(5599):在
com.example.media.MediaPlayerclass$1.onCompletion(MediaPlayerclass.java:41)
05-01 13:00:48.258:E/AndroidRuntime(5599):在
MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:2538)
当我从mediaplayerclass调用
mUpdateCountv
方法时textupdate
始终为空,因此我无法从mediaplayerclass
类更新我的textview。我的代码有什么问题吗?请提前感谢。在MediaPlayer类构造函数中,请执行以下操作:
mainActivity = (MainActivity) context;
在MainActivity中传递getActivity()
而不是getApplicationContext()
您正在创建新活动,但需要旧实例。您可以将其用作上下文对象(因为Activity是上下文的子类),如果需要调用update方法,可以将其强制转换为MainActivity。另一种方法是,将textview声明为静态,如下所示:
static TextView textupdate;
MainActivity.textupdate.setText("MpCompleted");
然后您可以直接在Mediaplayerclass中更新textview,如下所示:
static TextView textupdate;
MainActivity.textupdate.setText("MpCompleted");
感谢您的回复,我认为将小部件声明为静态是个坏主意。