-1

我有一个扩展 RelativeLayout 的自定义视图(可以是任何其他视图组)。在这个视图中,我使用 addView() 添加了几个框架布局。此视图不存在 XML!视图构造器从代码中添加所有内容。我想将此自定义视图用作活动的任何其他内容视图。我有这个片段活动:MyView myview;

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

       myview = new MyView(this);
       myview.getSomeContainedFrameLayoutOfView().setId(12345);
       setContentView(myview);
   }

然后我在 onResume 中执行此操作

  @Override
  protected void onResume() {

  super.onResume();

  View u = findViewById(12345); // test, returns null
  u = myview.findViewById(12345); // test, also null
  SomeFragment f = new SomeFragment();
  FragmentManager m = getSupportFragmentManager();
  FragmentTransaction ft = m.beginTransaction();
  ft.replace(12345, f); // ofcourse error (no view found for id)
  ft.commit();
  }

为什么为findViewById空?如果我将setContentView()线路改为 setContentView(R.layout.myframelayouts); 一切正常。所以不知何故,我怀疑 setId(12345) 有什么不同: android:id="@+id/someid" 我错过了什么?

4

2 回答 2

0

getSomeContainedFrameLayoutOfView() 返回的视图是否真的包含在RelativeLayout 中?也就是说,您是否在 MyView 的某个地方调用了 AddView(theTargetView)?

如果目标视图只是 MyView 的一个成员,那么实现 findViewById 的 RelativeLayout 除非您覆盖它,否则不知道目标视图。

于 2013-07-16T16:47:08.860 回答
0

我有这样的事情:

public class MojLayout extends LinearLayout {

private FrameLayout lijeviFrame;
private FrameLayout glavniFrame;
private int layoutWidth;
private int panel;
private boolean glavniFrameFullScreen = false;

public MojLayout(final Context context, final float leftWeight) {
    super(context);

    lijeviFrame = new FrameLayout(context);
    glavniFrame = new FrameLayout(context);

    post(new Runnable() {
        @Override
        public void run() {
            layoutWidth = getWidth();
            panel = (int) (layoutWidth / leftWeight);
            init(context);
        }
    });
}

private void init(Context context) {
    lijeviFrame.setId(R.id.lijeviFrame); //defined in /res/values/ids.xml
    glavniFrame.setId(R.id.glavniFrame);

    LinearLayout container = new LinearLayout(context);
    container.setOrientation(HORIZONTAL);
    ....
    container.addView(lijeviFrame);
    container.addView(glavniFrame);

    addView(container);
}

在 onCreate() 方法中,我尝试了 myView.findViewbyId(R.id.lijeviFrame) -> null,没有 myView,相同。我不明白

于 2013-07-17T08:36:00.930 回答