tyb*_*tyb 167 android android-fragments
如何在片段及其容器活动之间传递数据?是否有类似于通过意图在活动之间传递数据的东西?
我读了这个,但它没有多大帮助:http:
//developer.android.com/guide/topics/fundamentals/fragments.html#CommunicatingWithActivity
Har*_*mes 288
尝试使用接口.
应将数据传递回其包含活动的任何片段都应声明一个接口来处理和传递数据.然后确保包含的活动实现了这些接口.例如:
在你的片段中,声明接口...
public interface OnDataPass {
    public void onDataPass(String data);
}
然后,将包含类的接口实现连接到onAttach方法中的片段,如下所示:
OnDataPass dataPasser;
@Override
public void onAttach(Context context) {
    super.onAttach(context);
    dataPasser = (OnDataPass) context;
}
在您的片段中,当您需要处理数据传递时,只需在dataPasser对象上调用它:
public void passData(String data) {
    dataPasser.onDataPass(data);
}
最后,在你的包含活动中实现 OnDataPass ......
@Override
public void onDataPass(String data) {
    Log.d("LOG","hello " + data);
}
Nic*_*ick 200
在你的片段中你可以打电话getActivity().
这将使您可以访问创建片段的活动.从那里你可以明显地调用活动中的任何类型的访问器方法.
例如,对于getResult()您的活动调用的方法:
((MyActivity) getActivity()).getResult();
Xar*_*mer 22
最简单的方法,但不推荐
您可以从片段访问活动数据:
活动:
public class MyActivity extends Activity {
    private String myString = "hello";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        ...
    }
    public String getMyData() {
        return myString;
    }
}
分段:
public class MyFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        MyActivity activity = (MyActivity) getActivity();
        String myDataFromActivity = activity.getMyData();
        return view;
    }
}
Jee*_*etu 21
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    Bundle b = getActivity().getIntent().getExtras();
            wid = b.getString("wid");
            rid = b.getString("rid");
            View view = inflater.inflate(R.layout.categoryfragment, container, false);
    return view;
 }
Jor*_*sys 16
在片段及其容器活动之间传递数据
活动:
        Bundle bundle = new Bundle();
        bundle.putString("message", "Alo Elena!");
        FragmentClass fragInfo = new FragmentClass();
        fragInfo.setArguments(bundle);
        transaction.replace(R.id.fragment_single, fragInfo);
        transaction.commit();
分段:
读取片段中的值
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        String myValue = this.getArguments().getString("message");
        ...
        ...
        ...
        }
小智 6
我不知道这是不是最好的方法Bu我一直在google上搜索了一段时间,我发现如何将一个Bundle从一个片段传递给它的容器活动,但我发现所有这些都是将数据从活动发送到片段而不是(因为我是新手,这对我来说有点混乱).
后来我尝试了自己的东西,这对我来说非常有用.所以我会在这里发布一些像我这样的人寻找同样的事情.
//从Fragment传递数据.
Bundle gameData = new Bundle();
        gameData.putStringArrayList(Constant.KEY_PLAYERS_ARR,players);
        gameData.putString(Constant.KEY_TEAM_NAME,custom_team_name);
        gameData.putInt(Constant.KEY_REQUESTED_OVER,requestedOver);
        Intent intent = getActivity().getIntent();
        intent.putExtras(gameData);
//从包中获取数据包的容器活动.
Bundle gameData = getIntent().getExtras();
        if (gameData != null)
        {
            int over = gameData.getInt(Constant.KEY_REQUESTED_OVER);
            ArrayList<String> players = gameData.getStringArrayList(Constant.KEY_PLAYERS_ARR);
            String team = gameData.getString(Constant.KEY_TEAM_NAME);
        }
        else if (gameData == null)
        {
            Toast.makeText(this, "Bundle is null", Toast.LENGTH_SHORT).show();
        }
接口是最好的解决方案之一:
胶水接口:
public interface DataProviderFromActivity {
    public String getName();
    public String getId);
}  
我的活动:
public class MyActivity implements DataProviderFromActivity{
    String name = "Makarov";
    String id = "sys533";
    ... ... ... ... ... .... .... 
    ... ... ... ... ... .... .... 
    public String getName(){
        return name;
    };
    public String getId(){
        return id;
    };
}
我的片段:
public class MyFragment extends Fragment{
    String fragName = "";
    String fragId = "";
    ... ... ... ... ... .... .... 
    ... ... ... ... ... .... .... 
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        DataProviderFromActivity myActivity= (DataProviderFromActivity) getActivity();
        fragName = myActivity.getName();
        fragId = myActivity.getId();
        ... ... ... ... ... .... .... 
        ... ... ... ... ... .... .... 
        updateFragmentView();
    }
}
| 归档时间: | 
 | 
| 查看次数: | 232941 次 | 
| 最近记录: |