为setContentView提供自定义视图不起作用?

时间:2013-07-16 16:38:57

标签: android android-layout

我有一个自定义视图,可以扩展RelativeLayout(可以是任何其他视图组)。在这个视图中,我有几个添加了addView()的framelayout。此视图不存在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" 我错过了什么?

2 个答案:

答案 0 :(得分:0)

getSomeContainedFrameLayoutOfView()返回的视图是否实际包含在RelativeLayout中?也就是说,在MyView的某个地方你有没有调用AddView(theTargetView)?

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

答案 1 :(得分: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,相同。 我不明白