2011-02-02 6 views
4

내 활동 A가 다른 활동 B를 시작할 때 PD를 보여주고 싶습니다.하지만 그 onclick 방법에서, 내 A 활동은 시작 B 전에 약간의 작업을해야하며, B 또한 많이로드해야하기 때문에 일을해야합니다. UI 용 데이터 활동에서 다른 활동으로 변경하는 동안 ProgressDialog를 표시하는 방법은 무엇입니까?

제가

B.

에 활성 A로부터 무언가의 데이터로드의 모든 과정에서 사용자에 의해 시청 된 PD 필요 ¿ 어떻게합니까?

은 내가 MyApplication.java에 고정해서 ProgressDialog를 저장 tryed, 이러한 방법으로 :

public static void showProgressDialog(Context c) { 
    pd = ProgressDialog.show(c, c.getResources().getString(R.string.app_name), 
     c.getResources().getString(R.string.loading), true, false);  
} 
public static void dismissProgressDialog(){ 
    pd.dismiss(); 
} 

하지만이 작품은, 그것은 아무것도 표시하지 않습니다하지 않습니다, 내가 그나마 알고 왜

방법 쉬운 방법으로 이것을 달성하기 위해? 내가 비동기 작업을 함께 할 수 있다는 것을 알고 있지만, 그 날 너무 어렵다 , 나는이 웹에 발견하고 코드 예제를 이해하고

코드 예제 환영

덕분에 구글 수 없습니다

+0

'비동기 작업으로 할 수 있다는 것을 알고 있지만 너무 힘들어서 '미안하지만 그렇게하는 방법입니다. – Falmarri

+0

제발 쉬운 코드 예제를 제공 할 수 있습니까? – NullPointerException

답변

3

@Falmarri 주석에 동의합니다. 쉬운 방법은 AsyncTask로 구현하는 것입니다. AsyncTask는 UIThread와 백그라운드 스레드를 관리하기 때문입니다.

항상 AsyncTask를 사용하여이 작업을 수행하지만 내 요구 사항이 내 것과 비슷하지 않기 때문에 여기에 코드를 붙여 넣으면 도움이 될 것이라고 생각하지 않지만이 방법으로 수행 할 수 있다고 생각합니다.

AsyncTask를 서브 클래스 화하고이 메소드를 대체하십시오.

  • onPreExecute()이 방법은 UI 스레드 에서 호출되기 때문에 작성하고 진행을 대화 상자를 표시 할 수 있습니다.
  • doInBackground (Runnable를 작업) ... 배경 스레드에서이 방법을 실행하는 모든 당신 이해야 할 ... 처리 스레드에 대한 을 걱정할 필요하지는 있도록하는 노력을
    (공정이다 데이터, 다운로드 데이터 등)
    그리고 원하는 업데이트를 게시하십시오.

  • onProgressUpdate (객체 ... 값) ... 이 진행
    값으로 대화하여
    진행 상황을 업데이트 할 수 있도록 또한 UI 스레드에서 호출이 방법.

  • onPostExecute (개체 결과) ... UI 스레드 그래서에서 실행 이 방법, 당신은 작동
    결과를 표시하고 진행을
    대화 상자를 닫하고 새로운 활동을 호출 할 수 있습니다.

여기에 모든 작업 할 수있는, 활동 운영 및 활동 B 작동하고 AsynTask 당신을 위해 스레딩 관리 :

편집 한 관리됩니다

내가 돈을 얼마나 복잡한 지 알지 못 하겠지만 여기서 프로젝트를 만든다. 아마도 네가 원하는 것이 아니지만, 여기에 모든 것을 담고있다. 내 대답은 아마도 예제와 같다. PS : http://www.megaupload.com/?d=FWIJ3575

내가 여기 내 AsyncTask를 코드를 붙여 넣습니다 : http://pastebin.com/qsSGCpat하지만 난 많은 일을하는 데 사용하는 매우 때문에 그것은 당신을 도울 수 있다고 생각 해달라고 내가 당신과 함께 프로젝트를 어디다 잘 모릅니다 때문에 내가 여기에 프로젝트를 업로드 일반적인,하지만 어쩌면 당신은 내가 여기 당신이이 메커니즘에 대한 자세한 내용을보실 수 있습니다, 가장 중요한 중 하나입니다 때문에 당신이이 클래스에 대한 자세한 내용을 제안

... 이 http://android-developers.blogspot.com/2009/05/painless-threading.html

+0

나는 그것을 이해하지 못한다. 내 activiy A 및 내 activity B에서 실행중인 코드가 완료되면이 클래스를 어떻게 알 수 있습니까? 나는이 계급이 그것을 어떻게 알 수 있는지를 볼 수 없다. 그것이 A와 B가 끝내야하는 작업을 언제 끝내야하는지 알지 못한다면, progressdialog가 영원히 보여 질 것입니다. – NullPointerException

+0

당신은 여기서 모든 작업을 수행 할 수 있다고 말하지 만, 불가능합니다. 많은 작업이 있습니다. , 내 응용 프로그램은 이러한 작업 habe A와 B에 기부 할 수있는 방식으로 설계되었습니다. 나는 여기 이동할 수 없습니다. A와 B에는 수천 줄의 코드가 있습니다. 여기서 이동하려면 몇 주 또는 나방이 걸릴 것입니다. 여기에서 작업을 이동해야한다면 해결해야 할 많은 오류와 문제가있을 것입니다. – NullPointerException

+0

이 클래스에 작업을 넣지 않고 progressdialog를 수행 할 수 없습니다. S ??? – NullPointerException

1

당신은 추가 할 수 있습니다를보고 싶다 너의 배치에 prograss 막대기 :

<FrameLayout 
    android:id="@+id/mapLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
     //your layout 
    </LinearLayout> 

    <ProgressBar 
     android:id="@+id/progressBar" 
     style="?android:attr/progressBarStyleLarge" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" > 
    </ProgressBar> 

</FrameLayout> 

로드 활동에서 onCreate에서 진행 표시 줄 :

public void onCreate(final Bundle savedInstanceState) { 

    mProgress = (ProgressBar) findViewById(R.id.progressBar); 
    mProgress.setVisibility(View.VISIBLE); 

    //rest your code  
} 

정지 진행 표시 줄이 활동을 시작할 때 :

@Override 
protected void onStart() { 

    //your code 
    mProgress.setVisibility(View.GONE);   
    super.onStart(); 
} 
0
  1. 모든 방법로드/진행을 위해 싱글 인스턴스를 생성 -대화.
  2. 이 accesible troughout 응용 프로그램 정적 함수에서 관리 ProgressViews/대화 상자에 대한
  3. 를 사용하여 ApplicationContext를

이 그렇게 할 3 가지 방법이 될 수 있습니다.

관련 문제