在另一个线程中更改快餐栏文本
Change snackbar text in another Thread
显示一个 Snackbar 后,我 运行 一个线程来执行操作。我想根据此线程中的当前进度更改文本。
我创建了 Snackbar:
private View snackbarview;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton upload = (FloatingActionButton) findViewById(R.id.upload);
upload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Confirm ?", Snackbar.LENGTH_SHORT)
.setAction("YES", new View.OnClickListener() {
@Override
public void onClick(View view) {
lauchMyThread();
Snackbar snackbarconfirm = Snackbar.make(view, "Working...", Snackbar.LENGTH_INDEFINITE);
snackbarconfirm.show();
snackbarview = snackbarconfirm.getView();
}
}).show();
}
});
}
我尝试在 Runnable() 的 运行() 方法中更新其文本:
public void run() {
TextView tv = (TextView) snackbarview.findViewById(android.support.design.R.id.snackbar_text);
try {
tv.post(new Runnable() {
public void run() {
TextView tv = (TextView) snackbarview.findViewById(android.support.design.R.id.snackbar_text);
tv.setText("Task 1 performed.");
}
});
// and so on...
}
}
此方法适用于 Textview,但与 Snackbar 一起崩溃:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
如何解决?
为什么不尝试在 运行() 函数中创建一个新的小吃店..
您应该在 snackbarview
初始化后启动线程。
显示一个 Snackbar 后,我 运行 一个线程来执行操作。我想根据此线程中的当前进度更改文本。
我创建了 Snackbar:
private View snackbarview;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton upload = (FloatingActionButton) findViewById(R.id.upload);
upload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Confirm ?", Snackbar.LENGTH_SHORT)
.setAction("YES", new View.OnClickListener() {
@Override
public void onClick(View view) {
lauchMyThread();
Snackbar snackbarconfirm = Snackbar.make(view, "Working...", Snackbar.LENGTH_INDEFINITE);
snackbarconfirm.show();
snackbarview = snackbarconfirm.getView();
}
}).show();
}
});
}
我尝试在 Runnable() 的 运行() 方法中更新其文本:
public void run() {
TextView tv = (TextView) snackbarview.findViewById(android.support.design.R.id.snackbar_text);
try {
tv.post(new Runnable() {
public void run() {
TextView tv = (TextView) snackbarview.findViewById(android.support.design.R.id.snackbar_text);
tv.setText("Task 1 performed.");
}
});
// and so on...
}
}
此方法适用于 Textview,但与 Snackbar 一起崩溃:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
如何解决?
为什么不尝试在 运行() 函数中创建一个新的小吃店..
您应该在 snackbarview
初始化后启动线程。