2012-06-16 4 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에 frameLayout1이라는 id를 가진 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 {... 
} 
관련 문제