Android传递View作为片段的对象

Dol*_*rma 3 android android-fragments

我更google搜索我怎样才能将简单view的对象传递给片段,但我不能.

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

TextView text = (TextView) findviewById(R.id.tv_text);
Run Code Online (Sandbox Code Playgroud)

现在我想把它传递给片段.下面的代码是我在MainActivity上的附加片段

MainActivity :

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

这是我的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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Kar*_*rde 5

以这种方式传递视图不是一种好习惯.如果要从片段类getActivity()中访问活动中的视图,请使用访问片段所附加的活动,然后从中找到TextView.

TextView text = (TextView) getActivity().findViewById(R.id.tv_text);
Run Code Online (Sandbox Code Playgroud)


小智 4

如何在自定义片段中添加设置函数,例如

public void setTextView(TextView tv){
    this.tv = tv
}
Run Code Online (Sandbox Code Playgroud)

然后在之后调用它

mFragment = new FragmentMarketDetail();
mFragment.setTextView(textView)
Run Code Online (Sandbox Code Playgroud)