【问题标题】:Change snackbar text in another Thread在另一个线程中更改快餐栏文本
【发布时间】:2017-05-22 20:56:44
【问题描述】:

显示 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() 的 run() 方法中更新其文本:

 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:尝试在空对象引用上调用虚拟方法 'android.view.View android.view.View.findViewById(int)'

如何解决?

【问题讨论】:

  • snackbarview = snackbarconfirm.getView(); 行之后移动lauchMyThread();

标签: java android android-snackbar snackbar


【解决方案1】:

你应该在snackbarview初始化之后启动线程。

【讨论】:

    【解决方案2】:

    你为什么不尝试在 run() 函数中创建一个新的快餐栏..

    【讨论】:

    • 我确实可以,我只是更喜欢重用现有的。我不知道什么更有效。
    猜你喜欢
    • 2019-06-25
    • 2022-09-27
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    相关资源
    最近更新 更多