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

标签 java android android-fragments button fragment

我正在尝试以编程方式将图像按钮添加到作为 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/

相关文章:

java - 检索 token 时无法调用 keycloak 协议(protocol)映射器

java - ActionBarSherlock - 共享内容图标问题

android - 全屏底页 fragment

android - 在 FragmentManager 中发布更改 fragment

java - Collection 引用

Java 将匹配项分配给变量

android - 使用 ndk 构建工具构建 opencv 时出现此错误

java - Android Studio - 资源条目已定义

java - InflateException 二进制 XML 文件,第 7 行 : Error inflating class fragment

java - HQL 不返回结果,但生成的 SQL 在 SQL Developer 上完美运行