android - 从另一个类 android 开始 fragment

标签 android android-activity fragment

我有一个名为 SMSRecevier 的类,它接收和解释消息,并且根据消息必须执行某些任务。 我有一个 RegisterPhoneActivity 和一个 RegisterPhoneFragment,我想在某个 SMS 到达时附加到该 Activity 。我怎样才能做到这一点? 我试过这个: 在 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();
}

最佳答案

定义一个接口(interface)并使用回调让 Activity 知道已收到短信。

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

在您的 SMS 接收器类中

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);
}

在您的 Activity 中:

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 接收方不知道这些 Activity 。它只是回调任何已注册的监听器。

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

关于android - 从另一个类 android 开始 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19751247/

相关文章:

android - 错误 : "Error parsing XML: XML or text declaration not at start of entity"

android - 从 Fragment 获取 Activity 中的 Adapter

android - 软键盘不隐藏在 fragment 中。如何隐藏键盘?

java - Android Studio 无法识别 Fragment to Facebook Button

java - 为什么 Build.VERSION.SDK_INT 显示的数字不正确?

Java 如何处理对象中的 Array<MyItem> 的 "Unchecked cast"

android - 尽管 res 文件夹中存在相应的 xml 文件,但无法解析 dimen、mipmap、字符串的符号

java - 如何去除不同 Activity 中的重复代码?

android - 如何将 Activity 带到前台(堆栈顶部)?

android - 在 TextView 中显示整数变量