2013-05-18 36 views
2

我有一個循環向RelativeLayout添加可變數量的視圖,並且我想設置一些規則,例如BELOW,我的問題是我使用標籤動態命名對象,並使用我需要的addRule()方法使用一個ID,所以我試圖設置一個ID每次循環運行,這不是第一次。如何在充滿View的循環內動態使用addRule()和標記?

這是我的代碼:

for(int i = 1; i <= kNumberofViews; i++){ 
    View = new MyView(context); 
    RelativeLayout.LayoutParams params = new LayoutParams(kViewWidth, kViewHeight); 
    params.setMargins(kMarginLeft, kMarginTop, kMarginRight, kMarginBottom); 
    params.addRule(CENTER_HORIZONTAL); 
    if (i != 1){ 
     MyView view = (MyView)view.findViewWithTag(i-1); 
     view.setId(i); 
     params.addRule(RelativeLayout.BELOW, view.getId()); 
    } 
    View.setTag(i); 
    View.setBackgroundColor(Color.GREEN); 
    System.out.println("View " + i +" added correctly"); 
    addView(View, params); 
} 

我怎樣才能解決呢?

編輯:

05-18 14:57:19.549: E/AndroidRuntime(5500): FATAL EXCEPTION: main 
05-18 14:57:19.549: E/AndroidRuntime(5500): java.lang.RuntimeException: Unable to start activity ComponentInfo{me.gabrielesteban.app/me.gabrielesteban.app.MyRelativeLayoutTest}: android.view.InflateException: Binary XML file line #7: Error inflating class me.gabrielesteban.app.GD.MyRelativeLayout 
05-18 14:57:19.549: E/AndroidRuntime(5500):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307) 
05-18 14:57:19.549: E/AndroidRuntime(5500):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2357) 
05-18 14:57:19.549: E/AndroidRuntime(5500):  at android.app.ActivityThread.access$600(ActivityThread.java:153) 

編輯2:

我認爲這個問題是在下面的行MyView view = (MyView)view.findViewWithTag(i-1);,是這條線是否正確?

回答

1

我再次檢查了我的代碼,並且我讀取了How do I call findViewWithTag in the OnCreate() method of an activity?,並且我看到當我調用findViewWithTag()方法時,將與我在該方法之前找到的相同對象放在一起,所以結果是沒有找到對象在那個標籤裏面,所以我唯一需要做的就是刪除那個部分。

MyView view = (MyView)view.findViewWithTag(i-1); //Bad way to find the View 

MyView view = (MyView)findViewWithTag(i-1); //Good way to find the View by tag 
1

嘗試檢查是否有分配的ID之前分配一個新的!

for(int i = 1; i <= kNumberofViews; i++){ 
    View v = new MyView(context); 
    RelativeLayout.LayoutParams params = new LayoutParams(kViewWidth, kViewHeight); 
    params.setMargins(kMarginLeft, kMarginTop, kMarginRight, kMarginBottom); 
    params.addRule(CENTER_HORIZONTAL); 
    if (i != 1){ 
     MyView view = (MyView)findViewWithTag(i-1); 
     if (view.getId() == View.NO_ID) 
      view.setId(i); 
     params.addRule(RelativeLayout.BELOW, view.getId()); 
    } 
    View.setTag(i); 
    View.setBackgroundColor(Color.GREEN); 
    System.out.println("View " + i +" added correctly"); 
    addView(View, params); 
} 

編輯

編輯,檢查documentation,你是對的,一個視圖不能爲null,但如果沒有指定返回值的觀點是View.NO_ID(或-1)。

+0

但是,我認爲,一個int不能爲空,且ID爲一個int ... –

+0

充氣包含這個循環的看法時,我花了一個異常,我將張貼logcat的輸出 –

相關問題