2016-06-22 5 views
0

크로노 미터를 설정할 때 문제가 있습니다. Java 파일에 "updateTimerText"에 오류가 표시됩니다. 메서드 "updateTimerText (java.lang.string)을 해결할 수 없습니다. 어떻게 해결합니까?이 작업을 캐스팅하려고하는 조각은 모두 정밀합니다. Chronometer.java입니다. 당신이 다른 어떤 정보 나 코드가 필요한 경우 파일. 알려주세요. 감사합니다 사전에. 그것을 어떤 방식으로, 모양이나 형태로 도움이 될 것입니다 경우 여기 크로노 미터가 해결할 수 없음

package com.example.platinumirish.runassistwithdrawer; 

import android.content.Context; 

import runassist.demo.fragments.MainFragment; 

/** 
* Created by Platinum Irish on 22/06/2016. 
*/ 
public class Chronometer implements Runnable { 

    public static final long MILLIS_TO_MINUTES = 60000; 
    public static final long MILLIS_TO_HOURS = 3600000; 

    private Context mContext; 
    private long mStartTime; 

    private boolean mIsRunning; 

    public Chronometer(Context context){ 
     mContext = context; 
    } 

    public void start() { 
     mStartTime = System.currentTimeMillis(); 
     mIsRunning = true; 

    } 

    public void stop() { 

     mIsRunning = false; 

    } 

    @Override 
    public void run() { 

     while(mIsRunning) { 

      long since = System.currentTimeMillis() - mStartTime; 

       int seconds = (int) (since/1000 % 60); 
       int minutes = (int)(((since/MILLIS_TO_MINUTES)) % 60); 
       int hours = (int)((since/(MILLIS_TO_HOURS)) % 24); 
       int millis = (int) since % 1000; 

       MainFragment mainFragment = (MainFragment) mContext.updateTimerText(String.format(
        "%02d;%02d;%02d;%03d", hours, minutes, seconds, millis 

      )); 
     } 

    } 
} 

너무 내 홈페이지 조각입니다.

package runassist.demo.fragments; 

import android.app.Fragment; 
import android.content.Context; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.Chronometer; 
import android.widget.TextView; 

import com.example.platinumirish.runassistwithdrawer.R; 


public class MainFragment extends Fragment{ 

private TextView mTvTime; 
private Button mBtnStart; 
private Button mBtnStop; 

private Context mContext; 
private Chronometer mChronometer; 
private Thread mThreadChrono; 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_main, container, false); 

    mTvTime = (TextView) rootView.findViewById(R.id.chronometer); 
    mBtnStart = (Button) rootView.findViewById(R.id.start_button); 
    mBtnStop = (Button) rootView.findViewById(R.id.stop_button); 

    mBtnStart.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      if(mChronometer == null) { 
       mChronometer = new Chronometer(mContext); 
       mThreadChrono = new Thread((Runnable) mChronometer); 
       mThreadChrono.start(); 
       mChronometer.start(); 
      } 
     } 
    }); 

    mBtnStop.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if(mChronometer !=null) { 
       mChronometer.stop(); 
       mThreadChrono.interrupt(); 
       mThreadChrono = null; 

       mChronometer = null; 
      } 

     } 
    }); 

    return rootView; 

} 

public void updateTimerText(final String time) { 
    runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      mTvTime.setText(time); 
     } 

    }); 
} 

private void runOnUiThread(Runnable runnable) { 
} 

}

+0

이것은 자바가 아니며, android – SomeDude

+0

팁을 주셔서 감사합니다. –

+0

''((MainFragment) mContext) .updateTimerText (...)''이것은 원하는 방식입니다 불러라. mContext 주변의 사각형을 확인하십시오. – danypata

답변

0

((MainFragment) mContext).updateTimerText(...) 이것은 내가 전화를 걸고 싶은 방식입니다. 티. mContext 주변의 사각형을 확인하십시오. 또한, 그래서이 줄을 void을 반환 updateTimerText 당신의 방법

MainFragment mainFragment = (MainFragment) mContext.updateTimerText(String.format(
       "%02d;%02d;%02d;%03d", hours, minutes, seconds, millis)) 

다른 오류가 발생합니다. 그것은 단순히해야한다 :

((MainFragment) mContext).updateTimerText(...) 

나는 그것을 도울 수 없어요, 나는 우선이의 Runnable 클래스의 컨텍스트에 대한 참조를 유지하는 좋은 생각이다, 다른 접근 방법을 사용하는 것이 좋습니다합니다.

두 번째로 ContextActivity 또는 Fragment으로 변환하면 코드 재사용 가능성이 줄어들고 개발자가이 캐스트를 인식하지 못하는 경우 예기치 않은 충돌이 발생할 수 있습니다.

+0

'((MainFragment) mContext) .updateTimerText (String.format (''(MainFragment) mContext에서 다른 오류가 발생합니다.) '변환 할 수없는 유형이며, android.content.context를 runassist로 형 변환 할 수 없습니다. demo.fragments.MainFragment "@danypata –

+0

@ArronPotts 타이머와 통신하는 방식을 변경해야합니다. 잘못되었습니다. 현재 문제에 대한 답변을 게시했습니다. 타이머를 사용하는 방법과 방법에 대해 조금만 알려주십시오. 메시지를 보내고받습니다. – danypata

관련 문제