从另一个类android启动片段

时间:2013-11-03 08:49:26

标签: android android-activity fragment

我有一个名为SMSRecevier的类,它接收和解释消息,并根据消息必须进行某些任务。 我有一个RegisterPhoneActivity和一个RegisterPhoneFragment,我希望在某个短信到达时附加到该活动。我怎样才能做到这一点? 我试过这个: 在SMSReceiver中:

if (messageBody.contains(context.getResources().getString(R.string.numberResponse)))
                {
                    String[] parts = messageBody.split(" ");
                    String number1 = parts[3];
                    String number2 = parts[5];
                    String number3 = parts[7];
                    RegisterPhoneActivity registerPhoneActivity=new RegisterPhoneActivity();
                    registerPhoneActivity.showNumberFragment(number1, number2, number3);
                }
RegisterPhoneActivity中的

public void showNumberFragment(String no1, String no2, String no3)
{
    View container=findViewById(R.id.fragment_container);
    if (container!= null) {

        RegisterPhoneFragment newFragment = new RegisterPhoneFragment();
     Bundle args = new Bundle();
     args.putString(RegisterPhoneFragment.NUMBER1, no1);
     args.putString(RegisterPhoneFragment.NUMBER2, no2);
     args.putString(RegisterPhoneFragment.NUMBER3, no3);
     newFragment.setArguments(args);
    getSupportFragmentManager().beginTransaction()
    .add(R.id.fragment_container, newFragment).commit();
}

2 个答案:

答案 0 :(得分:1)

定义一个接口并使用回调让活动知道已收到短信。

public interface OnSmsReceivedListener {
    void onSMSReceived(int arg1, string arg2); ..<----add arguments you want to pass back
}

在短信接收器类中

ArrayList<OnSmsReceivedListener> listeners = new ArrayList<OnSmsReceivedListener>();

...

public void addSmsReceivedListener(OnSmsReceivedListener listener){
    if (!listeners.contains(listener){
        listeners.add(listener);
    }
}

public void removeSmsReceivedListener(OnSmsReceivedListener listener){
    if (listeners.contains(listener){
        listeners.remove(listener);
    }
}

当您收到符合条件的短信时:

for (OnSmsReceivedListener listener:listeners){
   listener.onSMSReceived(arg1, arg2);
}

在您的活动中:

public class RegisterPhoneActivity extends Activity implements OnSmsReceivedListener {

...

@Override
public void onCreate(Bundle savedInstanceState) 
{
    ...
    smsRecevier.addResponseReceivedistener(this); <--- this is the instance of your receiver
    ...
}

public void onSMSReceived(int arg1, string arg2){
   // do whatever you need to do
}


@Override
public void onPause(){

    ...
    smsReceiver.removeSmsReceivedListener(this);
    ...

}

全部来自记忆所以请原谅错别字。

这种方法解耦了类。 SMS接收器不了解活动。它只是回调任何已注册的监听器。

那些听众可能是活动,他们可能是服务。它们可能是MySparklyUnicorn的实例。接收者既不知道也不关心。它只是说“如果有人感兴趣,我收到了短信,这里是详细信息”。

答案 1 :(得分:0)

如果您在任何课程中都有Context参数(此处您需要SMSRecevier课程中的参数),则可以使用startActivity上下文方法开始任何活动。