2012-06-16 79 views
10

我試圖以編程方式將圖像按鈕添加到作爲viewpager一部分的片段。我嘗試了不同的代碼,但即使Eclipse沒有返回錯誤,也不會顯示按鈕。以編程方式將按鈕添加到片段

我發現了一個類似的問題here但答案並沒有幫助我讓我的按鈕出現。

這是我的代碼。

public class ViewPagerFragment extends Fragment { 

private ViewPagerActivity mViewPagerActivity; 
private String mId; 

public ViewPagerFragment(String id) { 
    mId = id; 
} 

@Override 
public void onAttach(Activity activity) { 
    if (activity instanceof ViewPagerActivity) { 
     mViewPagerActivity = (ViewPagerActivity)activity; 
    } 
    super.onAttach(activity); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment, container, false); 

    int[] image_array = { 
      R.drawable.elebutton, 
      R.drawable.right, 
      R.drawable.middle, 
      }; 

    for (int i =0;i<image_array.length;i++){ 
      ImageButton b1 = new ImageButton(getActivity()); 
      b1.setId(100 + i); 
      b1.setImageResource(image_array[i]); 

      RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
      if (i > 0) { 
       lp.addRule(RelativeLayout.BELOW, b1.getId() - 1); 
      } 
      b1.setLayoutParams(lp); 

      ImageHolder ih = new ImageHolder(getActivity()); 
      ih.addView(b1); 


    } 

    return v; 

} 
public class ImageHolder extends FrameLayout { 

    public ImageHolder(Context context) { 
     super(context); 
     initView(context); 
    } 

    public ImageHolder(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initView(context); 
    } 

    public ImageHolder(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     initView(context); 
    } 

    private void initView(Context context){ 
     View.inflate(context, R.layout.fragment, this); 
    } 

    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) { 
     // TODO Auto-generated method stub 
     for(int i = 0 ; i < getChildCount() ; i++){ 
      getChildAt(i).layout(l, t, r, b); 
     } 
    } 

} 

回答

0

看來您正在創建一些圖像,將它們中的每一個添加到圖像持有者。但是,我沒有看到您實際將圖像處理器加入主佈局的任何部分。所以基本上,這些都是創建的,但不能添加到任何地方讓我們假設你的R.layout.fragment只有一個FrameLayout,其id爲frameLayout1。以下是我的建議:

public class ViewPagerFragment extends Fragment { 

private ViewPagerActivity mViewPagerActivity; 
private String mId; 

public ViewPagerFragment(String id) { 
    mId = id; 
} 

@Override 
public void onAttach(Activity activity) { 
    if (activity instanceof ViewPagerActivity) { 
     mViewPagerActivity = (ViewPagerActivity)activity; 
    } 
    super.onAttach(activity); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment, container, false); 
} 
// IMPORTANT PART! Here we will add images after fragment is inflated and instantiated 
@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    // Get the root layout of fragment, we called it frameLayout1 
    FrameLayout fl = (FrameLayout)(this.getActivity.findViewById(R.id.frameLayout1)); 
    int[] image_array = { 
      R.drawable.elebutton, 
      R.drawable.right, 
      R.drawable.middle, 
      }; 

    for (int i =0;i<image_array.length;i++){ 
      ImageButton b1 = new ImageButton(getActivity()); 
      b1.setId(100 + i); 
      b1.setImageResource(image_array[i]); 

      RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
      if (i > 0) { 
       lp.addRule(RelativeLayout.BELOW, b1.getId() - 1); 
      } 
      b1.setLayoutParams(lp); 

      ImageHolder ih = new ImageHolder(getActivity()); 
      ih.addView(b1); 
      fl.addView(ih); 
    } 
} 
// End of important part 
public class ImageHolder extends FrameLayout {... 
} 
相關問題