将Android视图作为对象传递给片段。

5

我更多地是在谷歌上搜索如何将简单的view作为对象传递给Fragment,但是我无法做到。

例如,在MainActivity中,我有一个简单的视图:

TextView text = (TextView) findviewById(R.id.tv_text);

现在我想将它传递给片段。以下代码是我在MainActivity上附加Fragment的代码:

MainActivity

public void attachFragment() {
    fts = getActivity().getFragmentManager().beginTransaction();
    mFragment = new FragmentMarketDetail();
    fts.replace(R.id.cardsLine, mFragment, "FragmentMarketDetail");
    fts.commit();
}

这是我的Fragment

public class FragmentMarketDetail extends Fragment implements ObservableScrollViewCallbacks {
    public static final String SCROLLVIEW_STATE = "scrollviewState";
    private ObservableScrollView scrollViewTest;
    private Context    context;
    private int scrollY;

    public static FragmentMarketDetail newInstance() {
        FragmentMarketDetail fragmentFirst = new FragmentMarketDetail();
        return fragmentFirst;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_online_categories, container, false);
        scrollViewTest = (ObservableScrollView) view.findViewById(R.id.scrollViewTest);
        scrollViewTest.setScrollViewCallbacks(this);
        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = getActivity().getBaseContext();
    }
}
3个回答

5

这样传递视图不是一个好的实践。如果你想从片段类中访问活动中的视图,请使用getActivity()来访问与您的片段连接的活动,然后从那里找到您的TextView。

TextView text = (TextView) getActivity().findViewById(R.id.tv_text);

4
如何在您的自定义碎片中添加一个设置函数,例如:
public void setTextView(TextView tv){
    this.tv = tv
}

然后调用它

mFragment = new FragmentMarketDetail();
mFragment.setTextView(textView)

1

通过标签查找片段并对其调用函数:

mFragment = (FragmentMarketDetail ) getActivity().getFragmentManager().findFragmentByTag(FragmentMarketDetail .class.getSimpleName());
mFragment.passTextView(textView);

当然,片段必须添加到返回堆栈中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接