如何将数据从片段发送到活动

时间:2017-08-01 05:28:06

标签: android android-fragments android-activity

在我的应用程序中,我在一个活动中有两个片段。 在其中一个片段中,我有数据,例如:

String name = "Transporter";

我想将此名称发送到容器活动。 我该怎么做?请帮帮我。

6 个答案:

答案 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);