2017-04-22 1 views
2

Ich versuche einen Timer in meiner Snackbar einzustellen, ich habe das bisher versucht und habe den Timer zur Arbeit gebracht, aber nicht in der getTime() Methode, die ich denke, könnte der Grund sein, warum das nicht ist arbeite nicht.Ich kann den Timer in der Snackbar nicht einstellen

Es tut mir leid, wenn das eine Frage zu schade ist, mache ich Android nur als Nebenprojekt.

public class MainActivity extends AppCompatActivity { 

private static final String AUDIO_RECORDER_FILE_EXT = ".3gp"; 
private static final String AUDIO_RECORDER_FOLDER = "VRemind"; 
private MediaRecorder recorder = null; 
private int currentFormat = 0; 
private int output_format = MediaRecorder.OutputFormat.THREE_GPP; 
private String file_ext = AUDIO_RECORDER_FILE_EXT; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final CountDownTimer t; 


    t = new CountDownTimer(Long.MAX_VALUE , 1000) { 

     int cnt=0; 

     @Override 
     public void onTick(long millisUntilFinished) { 

      cnt++; 
      long millis = cnt; 
      int seconds = (int) (millis/60); 

      setTime(cnt); 
      Log.d("Count:", ""+cnt); 
     } 

     @Override 
     public void onFinish() { 

     } 
    }; 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 


    final Snackbar snackbar = Snackbar.make(findViewById(R.id.root_layout), getTime(), Snackbar.LENGTH_INDEFINITE); 

    final FloatingActionButton fabAdd = (FloatingActionButton) findViewById(R.id.fabAdd); 
    final FloatingActionButton fabStop = (FloatingActionButton) findViewById(R.id.fabStop); 

    fabAdd.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      t.start(); 
      fabAdd.setVisibility(View.GONE); 
      fabStop.setVisibility(View.VISIBLE); 
      snackbar.show(); 
      snackbar.setAction("CANCEL", new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        snackbar.dismiss(); 
        fabAdd.setVisibility(View.VISIBLE); 
        fabStop.setVisibility(View.GONE); 
       } 
      }); 

     } 
    }); 

    fabStop.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      t.cancel(); 
      snackbar.dismiss(); 
      fabStop.setVisibility(View.GONE); 
      fabAdd.setVisibility(View.VISIBLE); 
     } 
    }); 




} 




private String display; 

public void setTime(int rawCount) { 

    int rc = rawCount; 

    int minutes = (rc - (rc % 60))/60; 
    int seconds = (rc % 60); 

    String mins = String.format(Locale.ENGLISH, "%02d", minutes); 
    String secs = String.format(Locale.ENGLISH, "%02d", seconds); 
    display = mins+ ":" +secs; 

    Log.d("CountTwo:",display); 
    getTime(); 

} 

public String getTime() { 

    Log.d("Count getTime:", display); 
    return display; 
} 

Antwort

0

ich in sie sah, und das Problem war, dass der String display an die Snackbar unzugänglich war und auch die Snackbar Test konnte nicht dynamisch zu aktualisieren, so habe ich diese beiden und machte ein paar Änderungen hier und dort und hier ist Mein Code:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final CountDownTimer t; 


     t = new CountDownTimer(Long.MAX_VALUE , 1000) { 

      int cnt=0; 

      @Override 
      public void onTick(long millisUntilFinished) { 

       cnt++; 
       long millis = cnt; 
       int seconds = (int) (millis/60); 

       setTime(cnt); 
       Log.d("Count:", ""+cnt); 
      } 

      @Override 
      public void onFinish() { 
       cnt = 0; 
      } 

     }; 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 


     snackbar = Snackbar.make(findViewById(R.id.root_layout), "", Snackbar.LENGTH_INDEFINITE); 

     final FloatingActionButton fabAdd = (FloatingActionButton) findViewById(R.id.fabAdd); 
     final FloatingActionButton fabStop = (FloatingActionButton) findViewById(R.id.fabStop); 

     fabAdd.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       t.start(); 
       fabAdd.setVisibility(View.GONE); 
       fabStop.setVisibility(View.VISIBLE); 
       snackbar.show(); 
       snackbar.setAction("CANCEL", new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         t.cancel(); 
         t.onFinish(); 
//      setTime(0); 
         snackbar.dismiss(); 
         fabAdd.setVisibility(View.VISIBLE); 
         fabStop.setVisibility(View.GONE); 
        } 
       }); 

      } 
     }); 

     fabStop.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       t.cancel(); 
       t.onFinish(); 
//    setTime(0); 
       snackbar.dismiss(); 
       fabStop.setVisibility(View.GONE); 
       fabAdd.setVisibility(View.VISIBLE); 
      } 
     }); 




    } 


    /* 
     public void Duration() { 
     *//*  Timer timer = new Timer(); 

      TimerTask timerTask = new TimerTask() { 
       @Override 
       public void run() { 

        runOnUiThread(new Runnable() { 
         int count; 

         @Override 
         public void run() { 
          setTime(count); 
          count++; 
          Log.d("Count:", ""+count); 
         } 
        }); 
       } 
      };*//* //Old code removed on [email protected]:41PM 


     }*/ //Old code Duration method 

    String display=""; 

    public void setTime(int rawCount) { 

//  int rc = rawCount; 

     int minutes = (rawCount - (rawCount % 60))/60; 
     int seconds = (rawCount % 60); 

     String mins = String.format(Locale.ENGLISH, "%02d", minutes); 
     String secs = String.format(Locale.ENGLISH, "%02d", seconds); 
     display = mins+ ":" +secs; 

     Log.d("CountTwo:",display); 
     snackbar.setText(display); 

    } 

    /*public String getTime() { 

     Log.d("Count getTime:", display); 
     return display; 
    }*/ 
2

Erhalten Sie diese Nachricht?

java.lang.NullPointerException: println braucht eine Nachricht

Wenn ja, es liegt daran, dass Sie versuchen, eine Null-Mitteilung wie folgt anmelden:

Log.d("Count getTime:", display); 

Sie die Anzeige initialisieren müssen Variable, um einen Wert für den ersten Lauf zu haben.

private String display = ""; 
+0

Ja, aber das wird mein Problem nicht lösen. Ich kann das machen, aber es gibt immer noch nichts, um die Snackbar anzuzeigen – 4127157

Verwandte Themen