我正在尝试以编程方式将图像按钮添加到作为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 :(得分:0)
您似乎正在创建i个图像,并将每个图像添加到图像库中。但是,我没有看到您实际将图像持有者加入主布局的任何部分。所以基本上,这些是创建的,但不会添加到任何地方。让我们假设您的R.layout.fragment只有一个带有帧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 {...
}
答案 1 :(得分:0)
您可以参考Adding button to fragments dynamically上的答案。
基本上在你的onCreateView方法上,实现它。此外,您不应将getActivity()
用于ImageButton,而应使用yourView.getContext()
。
View myView = inflater.inflate(R.layout.fragment, container, false);
for (int i = 0; i < image_array.length; i++) {
final ImageButton b1 = new ImageButton(myView.getContext());
b1.setImageResource(image_array[i]);
b1.setId(i + 1);
b1.setOnClickListener(this);
//Change the linearlayout to relative layout for your context
//you should set another layout within your R.layout.fragment
LinearLayout linearlayout = (LinearLayout) myView.findViewById(R.id.btnholder);
linearlayout.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
buttonParams.setMargins(left, top, right, btm);
linearlayout.addView(b1, buttonParams);
}
希望这会有所帮助。当我创建普通按钮时,我有一段时间遇到同样的问题。如果您还有其他需要,请告诉我:)。