繁体   English   中英

Android Fragments:如何使用其他布局上的视图?

[英]Android Fragments: How to work with views on other layouts?

我正在编写一个使用Fragments的Android应用(4.4)。 每个Fragment都在自己的.java文件(和自己的类)中,并且每个Fragment都有自己的.XML(布局)文件。 在主要的FragmentActivity中,我的“ getItem”例程读取“ position”参数,并根据需要创建这些类的实例。

当应用程序启动时,当片段0(零)启动时,它将在“ onCreateView”中运行一些代码。 根据该代码中发生的情况,我需要更改Fragment 1的UI(按钮根据该逻辑出现和消失)。

但是,代码RUNS没有错误,但是UI更改没有生效。 我在想,也许我需要在范围更广的其他地方运行“启动”代码。 我可能是错的。

谁能为我建议一种在启动时能够控制各种布局的UI的方法吗?

谢谢!

如果您可以发布一些代码,将会更容易。

无论如何,如果我遇到了问题,则需要从片段0更改片段1的UI。

您需要的是与其他片段通信文档中解释的内容

您应该执行以下操作:

public class MyActivity extends FragmentActivity implements MyInterface{

    @Override
    public void changeUI(String sometext) {
        Fragment1 fragment1 = (Fragment1) getFragmentManager().findFragmentByTag("tagCommittedFragment1");
        fragment1.applyChange(sometext);
    }

}

public class Fragment0 extends Fragment{

    MyInterface mMyInterface;

    public interface MyInterface {
        public void changeUI(String sometext);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        mMyInterface = (MyInterface) activity;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);          
        mMyInterface.changeUI("newtext");
    }

}

public class Fragment1 extends Fragment{
    public void applyChange(String sometext){
        // do your work
    }
}

您必须创建一个接口以在片段之间进行通信,这将由您的MainActivity实现:

public interface Communicator {

        public void respond(String data);
    }  

现在,您需要使用此接口从FragmentA发送数据:

Communicator comm = getAcitivity();     //your activity must implement this interface 
comm.respond(data);

当您的MainActivity实现上述接口时,它还将实现response()方法,该方法可用于将数据传递给FragmentB:

public void respond(String data){
    FragmentManager manager = getSupportFragmentManager();
    FragmentB fragB = manager.findFragmentById(R.id.fragment_b);
    fragB.changeData(data);
}

现在,您需要做的就是收集这些数据,并使用changeData()方法在FragmentB中进行更改:

public void changeData(String data){
    textView.setText(data);
}

注意:由于FragmentB不使用该接口,因此它不应对它可见,因此您也可以在FragmentA内创建该接口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM