1

저는 RecyclerView으로 활동을합니다;활동이 끝나면 어떻게 RecyclerView ViewHolder에서 스레드를 멈출 수 있습니까?

RecyclerView에는 검색 바 및 재생 버튼이있는 노래 목록을 만들었습니다.

가 SeekBar를,이 스레드

하지만 변경 작업을 사용하여 음악의 현재 위치와 이동, 음악은 내가 활동을 변경할 때 내가 원하는

을 중지하지만 오류가, 음악은 중단하고 오류없는

도와주세요

//seekbar change listener 
seekbar.setMax(music.getDuration()); 

seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 
    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onProgressChanged(SeekBar seekBar, int progress, 
      boolean fromUser) { 
     // TODO Auto-generated method stub 
     if(fromUser) 
      music.seekTo(progress); 
    } 
}); 

//music playing 
public void button(View v){ 
if(music.isPlaying()){ 
    music.stop(); 
    try { 
     music.prepare(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    music.seekTo(0); 

    button.setText(R.string.start); 
    seekbar.setProgress(0); 
    }else{ 
    music.start(); 
    button.setText(R.string.stop); 

    Thread(); 
} 
} 

//Thread 
public void Thread(){ 
    Runnable task = new Runnable(){ 
     public void run(){ 

      while(music.isPlaying()){ 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

       seekbar.setProgress(music.getCurrentPosition()); 
      } 
     } 
    }; 
    Thread thread = new Thread(task); 
    thread.start(); 
} 
+0

onStop() 또는 onPause() 메소드에서 메소드를 중지 시키려고 했습니까? – ZeroOne

+0

나는 그것을 시도했다. 그러나 그것은 recyclerview.viewholder에있다. 그래서 onStop()이나 onPause 메소드를 사용할 수 없다. –

답변

0

스레드는 활동 또는 단편에서 죽일 수 있습니다. 이 클래스를 사용하여 recyclerview 클릭 리스너를 재정의 할 수 있습니다.

새로운 자바 파일을 생성하고 활동에 RecyclerItemClickListener.java

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { 
    private OnItemClickListener mListener; 

    public interface OnItemClickListener { 
     void onItemClick(View view, int position); 
    } 

    private GestureDetector mGestureDetector; 

    public RecyclerItemClickListener(Context context, OnItemClickListener listener) { 
     mListener = listener; 
     mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
      @Override 
      public boolean onSingleTapUp(MotionEvent e) { 
       return true; 
      } 
     }); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { 
     View childView = view.findChildViewUnder(e.getX(), e.getY()); 
     if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { 
      mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); 
     } 
     return false; 
    } 

    @Override 
    public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { } 

    @Override 
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 
     // do nothing 
    } 
} 

/조각 지금

yourRecyclerviewId.addOnItemTouchListener(new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() { 
     @Override 
     public void onItemClick(View view1, int position) { 
      //view1 - is clicked view 
      //position - position of the clicked list 

      //put your method in here 

     } 
})); 

, 당신은 스레드 또는 서비스를 죽일 OnPause()과를 OnStop() 메소드를 사용하여 이름을