2017-01-08 3 views
0

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のために動作しますが、スナックバーでクラッシュ:

java.lang.NullPointerException:仮想メソッド 'android.view.View android.view.View.findViewById(int)'をnull obで呼び出そうとしています参照先

どのように修正するのですか?

+1

'snackbarview = snackbarconfirm.getView();'の後に 'lauchMyThread();'行を移動してください。 –

答えて

1

..あなたが新しいスナックバーランの内側()関数を作成してみてくださいいけません。

+0

ありがとう、今それはかなり明らかです... – Anduriel

1

なぜあなたはsnackbarview初期化後にスレッドを起動する必要があります

+0

私は実際には既存のものを再利用することができます。私はより効率的なものがわからない。 – Anduriel

関連する問題