Java 名称的类添加参数以恢复片段

Java 名称的类添加参数以恢复片段,java,android,android-fragments,android-viewpager,nosuchmethoderror,Java,Android,Android Fragments,Android Viewpager,Nosuchmethoderror,好的,我的问题有点难以解释 我有一个滑块,可以滑动碎片。这只是一个简单的浏览页面。 现在我想让它更具可重用性:P 我的设置如下: SliderContainer(我在这里得到了viewpager,这只是一个片段,我可以包含任何内容)。 滑块(这是导致问题的滑块本身,该滑块包含在容纳滑块的容器中,因此滑块容器)。 SliderFragment(这是可以滑动tru的布局,其中包括一个.xml文件和一个使用这个.xml文件的类,然后我可以在java文件中定制onclicklisteners等,所以这是

好的,我的问题有点难以解释

我有一个滑块,可以滑动碎片。这只是一个简单的浏览页面。 现在我想让它更具可重用性:P

我的设置如下: SliderContainer(我在这里得到了viewpager,这只是一个片段,我可以包含任何内容)。 滑块(这是导致问题的滑块本身,该滑块包含在容纳滑块的容器中,因此滑块容器)。 SliderFragment(这是可以滑动tru的布局,其中包括一个.xml文件和一个使用这个.xml文件的类,然后我可以在java文件中定制onclicklisteners等,所以这是slider.java使用的slider对象)

我想重用这段代码。滑块片段只需要被替换,如果我想将其添加到另一个页面,因为另一个页面需要另一个布局和其他功能

slider包含的类(现在是它的静态sliderFragment),但是应该由一个参数调用,我应该更改它的名称,所以我只需要替换函数文件,并将这个类的名称传递给sliderContainer>slider>sliderFragment

@Override
public Fragment getItem(int position) 
{
    // make the first pager bigger than others
    if (position == slider_firstpage)
        scale = Constants.slider_bigscale;      
    else
        scale = Constants.slider_smallscale;

    position = position % slider_pages;

    try {
        c = Class.forName("com.homeslider.SliderFragment").getConstructor(Slider.class, Integer.class, Integer.class, Float.class, String.class, String.class); 
        return (Fragment) c.newInstance(context, position, scale, slider_titles, slider_images);
    } catch (InstantiationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}
我使用class.forname,它可以将stringname转换为类名。一切都好。 这是slider中的一段代码,其中包括sliderFragment

@Override
public Fragment getItem(int position) 
{
    // make the first pager bigger than others
    if (position == slider_firstpage)
        scale = Constants.slider_bigscale;      
    else
        scale = Constants.slider_smallscale;

    position = position % slider_pages;

    try {
        c = Class.forName("com.homeslider.SliderFragment").getConstructor(Slider.class, Integer.class, Integer.class, Float.class, String.class, String.class); 
        return (Fragment) c.newInstance(context, position, scale, slider_titles, slider_images);
    } catch (InstantiationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}
SliderFragment需要:上下文、int、int、字符串数组、字符串数组。 这是sliderFragment需要的参数

最初我只会这样做:

return SliderFragment.newInstance(context, position, scale, slider_titles, slider_images);
我使用的代码对我来说不是很好,它只抛出了一个NoSuchMethodFound异常,但是有什么问题吗? 我在互联网上找不到其他使用这种方法来稳定片段的材料,所以我需要在这里提问

所以我的最后一个问题是: 为什么它会测试noSuchMethodFound错误(我知道我在getParameters中使用了错误的类型,但我不知道我需要使用什么),以及我的代码中出现了什么错误? 有什么建议吗

我欢迎任何帮助:)

应要求:

SliderContainer.java(容器片段)

这个人通过getArguments从他的主机活动中获取参数,并在将其设置为适配器时将这些参数传递给Slider.java

在这里,我初始化了我的sliderContainer(他的宿主活动)

它生成片段(SliderContainer.java)并使用addArguments添加参数。 sliderContainer是sliderContainer使用的viewpager,它不在slider.java中使用

重要提示: 当我使用这段没有类的代码作为name方法时,它起了作用。 所以这里没有任何错误,它错误地将数据从Slider发送到SliderFragment.java并生成片段

sliderfragment.java中接收的数据:

    public static Fragment newInstance(Context context, int pos, float scale, String[] slider_titles
        , String[] slider_fragmentbackground)
{
    Bundle b = new Bundle();
    b.putInt("pos", pos);
    b.putFloat("scale", scale);
    b.putStringArray("names", slider_titles);
    b.putStringArray("images", slider_fragmentbackground);
    return Fragment.instantiate(context, SliderFragment.class.getName(), b);
}

然后在以后的代码中通过调用onCreateView重用该代码,并执行以下操作。getArgument().get--type--(“key”)

请尝试以下两行代码:

c = Class.forName("com.homeslider.SliderFragment").getConstructor(Context.class, Integer.TYPE, Float.TYPE, String[].class, String[].class);
return (Fragment) c.newInstance(context, position, scale, slider_titles, slider_images);
鉴于:

context is of type Context
position is of type primitive int
scale is of type primitive float
slider_titles is an String array
slider_images is a String array

您能添加显示上下文、位置、比例、滑块标题、滑块图像确切类型的源代码吗??当然,请稍候;)添加了我将类型设置为SliderContainer的位置,以及我将它们从SliderContainer重新发送到Slider并接收它们的位置。我看不到您使用的确切类型。请添加您传递给newInstance()方法进行验证的变量的声明和定义。好吧,它在没有name类的情况下确实有效,所以我想问题不在于变量提供的信息。我只将Context/int/float/String array/String array传递给SliderFragment.java。Slider从构造函数中获取它们并使用它。把它赋给它的全局声明变量。噢,哈哈,真是太棒了。我马上就去试试!获取构造函数时请删除一个类型参数,或在调用
newInstance()
时再提供一个参数。但是做正确的事:)你期望多少参数?伙计,我不明白你的意思。。。你能编辑一下我的Slider.java帖子吗?有5个参数,只是类没有方法newInstance,所以我不知道该怎么做。将构造函数的签名作为源代码发布到注释中,好吗?然后,我可以向您展示如何通过反射获取它,以及如何将参数传递给newInstance().c=Class.forName(“com.homeslider.SliderFragment”).getConstructor(Context.Class、Integer.Class、Float.Class、String[].Class、String[].Class);返回(片段)c.newInstance(上下文、位置、比例、滑块标题、滑块图像);c是类型构造函数
context is of type Context
position is of type primitive int
scale is of type primitive float
slider_titles is an String array
slider_images is a String array