2015-02-20 2 views
0

Я хочу показать ProgressDialog о текущей деятельности из внешнего класса, кроме передачи переменной во внешний класс или использования статической переменной, как и другие ответы на вопросы. Является ли это возможным? Вот некоторые простой тест код, который может помочь проиллюстрировать то, что я хочу сделать:Показать ProgressDialog извне класса

MainActivity.java

package com.example.test; 

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import com.example.test.test2; 

public class MainActivity extends ActionBarActivity { 

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

    public void buttonPressed(View view) { 
     test2 T2; 
     T2 = new test2(); 
     Log.d("button", "pressed"); 
     T2.change(); 
    } 
} 

И test2.java

package com.example.test; 

import android.app.ProgressDialog; 

public class test2 { 

ProgressDialog mDialog; 

    public void change() { 
     mDialog = new ProgressDialog(this); 
     mDialog.setMessage("Testing"); 
     mDialog.setCancelable(true); 
     mDialog.show(); 
    } 

} 

Когда кнопка нажата, Funtion buttonPressed , который вызывает класс test2 для отображения ProgressDialog для основной активности.

Я думаю, что все это зависит от контекста в mDialog = new ProgressDialog(this);, как-то нужно рассказать о текущей деятельности? Но я новичок в Java, так что это просто догадка.

+1

Ваше предположение верно, потому что ' this' относится к текущему классу. И вам нужен «Контекст» для конструктора, который «Активность» есть. Ответ от programmer23 должен сработать для вас – codeMagic

ответ

1

Возможное решение изменить способ прохождения текущей деятельности в качестве параметра из Test2:

public void change(Context context) { 
    mDialog = new ProgressDialog(context); 
    mDialog.setMessage("Testing"); 
    mDialog.setCancelable(true); 
    mDialog.show(); 
} 

А потом в классе MainActivity сделать этот вызов:

public void buttonPressed(View view) { 
    test2 T2; 
    T2 = new test2(); 
    Log.d("button", "pressed"); 
    T2.change(this); 
} 
+0

Спасибо, отлично работает, приятно и просто, не могу поверить, что я не думал об этом ха-ха! – stretch