Android的片段 - BroadcastReceiver调用片段方法
我有一个BroadcastReceiver接收广播发送到一个片段。 我收到了广播,但是如何从片段本身调用一个方法? 我基本上需要在广播到达时更新列表,列表&更新方法是片段的一部分。Android的片段 - BroadcastReceiver调用片段方法
public class FragmentReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action != null && action.equals("AllTasksFragmentUpdate"))
{
//
}
}
}
注册接收器:
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getActivity().registerReceiver(new FragmentReceiver(), new IntentFilter("AllTasksFragmentUpdate"));
}
我如何可以调用从片段的方法是什么?
you can implement your broadcast reciever in this way
import android.app.Fragment;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.content.LocalBroadcastManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.adobe.libs.connectors.R;
public class YourFragment extends Fragment
{
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
{
super.onCreateView(inflater, container, savedInstanceState);
// start listening for refresh local file list in
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mYourBroadcastReceiver,
new IntentFilter(<YOUR INTENT FILTER>));
return inflater.inflate(R.layout.your_fragment_layout, null, true);
}
@Override
public void onDestroyView()
{
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mYourBroadcastReceiver);
}
private final BroadcastReceiver mYourBroadcastReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
// now you can call all your fragments method here
}
};
}
我必须使用'onCreateViewRAW'还是可以坚持'onCreateView'? –
抱歉坚持onCreateView – dex
我在清单文件中添加'receiver'时发现问题,因为它找不到'mYourBroadcastReceiver'。 –
在你的onReceive()方法中,你可以通过它的标签名(实例化你的分片的名字)找到你的分片并调用它的公有方法。
SampleFragment fragment = (SampleFragment) getSupportFragmentManager().findFragmentByTag(<fragment_tag_name>);
if (fragment != null && fragment.isAdded()) {
fragment.method(); //Call any public method
}
希望这会有所帮助!
我收到一个错误'无法解析getSupportFragmentManager'。我相信Receiver类需要扩展'FragmentActivity',但它已经扩展'BroadcastReceiver'。 –
包含您的接收器和/或片段的活动应该扩展FragmentActivity。 –
假设你有一个名为活动和MyActivity在代码中的某个时刻,你想通过一个名为MyFragment片段接收的广播。你可以这样说:
在MyActivity,使用LocalBroadcastManager使广播与过滤器:
String filter = "thisIsForMyFragment";
Intent intent = new Intent(filter); //If you need extra, add: intent.putExtra("extra","something");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
在MyFragment,里面onCreateView()添加此注册的接收器:
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(myBroadcastReceiver,
new IntentFilter("thisIsForMyFragment"));
以下,在MyFragment(onCreateView外())创建的接收器的方法来接收该广播:
private final BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, android.content.Intent intent) {
Toast.makeText(getActivity(), "Broadcast received!", Toast.LENGTH_SHORT).show();//Do what you want when the broadcast is received...
}
};
最后,在MyFragment添加此注销接收器onDestroyView:
@Override
public void onDestroyView()
{
super.onDestroyView();
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(myBroadcastReceiver);
}
谁正在实施这个广播接收器,如果片段,然后即可轻松调用方法brodacast接收机内部。 – dex
你可以在你的片段中注册一个接收器,并在那里实现,然后你可以调用你的片段的任何方法。 –
您可以简单地从广播接收机的onReceive方法中调用片段的方法。你不能吗? –