在我的应用程序中,我在一个活动中有两个片段。 在其中一个片段中,我有数据,例如:
String name = "Transporter";
我想将此名称发送到容器活动。 我该怎么做?请帮帮我。
答案 0 :(得分:3)
尝试以下代码
// You Activity implements your interface
public class YourActivity implements FragmentA.TextClicked{
@Override
public void sendText(String text){
// Your text
}
}
//片段A定义了一个接口,并在需要时调用该方法
public class FragA extends Fragment{
TextClicked mCallback;
public interface TextClicked{
public void sendText(String text);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (TextClicked) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement TextClicked");
}
}
public void someMethod(){
mCallback.sendText("YOUR TEXT");
}
@Override
public void onDetach() {
mCallback = null; // => avoid leaking, thanks @Deepscorn
super.onDetach();
}
}
答案 1 :(得分:3)
该片段将附加到您从中启动的活动。
因此,您可以在活动中创建一个回调方法,该方法可以使用活动上下文对象从片段中调用。
请参阅以下代码段:
public class YourFragment extends Fragment{
OnCallbackReceived mCallback;
// Implement this interface in your Activity.
public interface OnCallbackReceived {
public void Update();
}
在你的片段中:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallback = (OnCallbackReceived) activity;
} catch (ClassCastException e) {
}
}
// You can Call the event from fragment as mentioned below
// mCallback is the activity context.
mCallback.Update();
活动:
public class MainActivity extends Activity
implements YourFragment.OnCallbackReceived {
// Implemented method.
public override void Update() {
// Write your logic here.
}
答案 2 :(得分:1)
如果您正在从片段调用活动并且想要将数据发送到Activity,则可以使用如下所示的意图:
<div class='none' itemprop='image' itemscope='itemscope' itemtype='https://schema.org/ImageObject'>
<b:if cond='data:post.firstImageUrl'>
<amp-img expr:src='data:post.firstImageUrl' itemprop='image'/>
<meta expr:content='data:post.firstImageUrl' itemprop='url'/>
</b:if>
<meta content='800' itemprop='width'/> <!--Images should be at least 696 pixels wide.-->
<meta content='800' itemprop='height'/>
</div>
在您的活动中,您应该获得如下数据:
<amp-img
答案 3 :(得分:0)
您需要创建一个界面。
Like
interface DataReciver
{
void getData(String data);
}
public class MainActivity extends AppcompactActivity
{
// On fragment load
oncreate
{
DataReciver obj=new DataReciver()
{
@overide
void getData(String data)
{
// Here is your data in data variable
}
}
frgamenttranstatiion.add(YOUR CONTAINER, new FRAGMENT1(obj));
}
}
Create a fragment with constructor
public class Fragment1
{
Fragment1(DataReciver datareciver)
{
datareciver.getData("amit sharma");
}
}
答案 4 :(得分:0)
目前最好的方法(和我的建议)正在使用ViewModel
。你可以在android网站上找到样本。但我应该说它仍然是测试版。
https://developer.android.com/topic/libraries/architecture/viewmodel.html
答案 5 :(得分:0)
你可以这样做
在
等活动中创建方法public void doSomething(String abc)
{
// do your stuff here
}
并从片段
访问它像
((HomeActivity)getActivity()).doSomething(string);