gpt4 book ai didi

java - 以编程方式将按钮添加到 fragment

转载 作者:行者123 更新时间:2023-12-04 02:29:50 24 4
gpt4 key购买 nike

我正在尝试以编程方式将图像按钮添加到作为 viewpager 一部分的 fragment 中。我尝试了不同的代码,但即使 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);
}
}

}

最佳答案

似乎您正在创建 i 数量的图像,并将它们中的每一个添加到图像持有者。但是,我没有看到您将图像持有者实际加入主布局的任何部分。所以基本上,这些都是创建的,但没有添加到任何地方。让我们假设您的 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 {...
}

关于java - 以编程方式将按钮添加到 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11066847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com