2012-06-16 20 views
10

ビューポートの一部であるフラグメントにプログラムで画像ボタンを追加しようとしています。異なるコードを試しましたが、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にidがframeLayout1のFrameLayoutしかないとします。以下は私の提案です:

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 {... 
} 
関連する問題