реализовать абстрактный метод при переходе от действия к фрагменту - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь добавить пользовательский плагин слайдера изображений во фрагмент. Этот плагин-слайдер отлично работает в Activity, но при переходе от действия к фрагменту он показывает: класс должен быть объявлен как абстрактный или реализовать абстрактный метод. Я только начал изучать фрагмент. При поиске решения я получил совет по реализации абстрактного класса, но я не уверен, как добавить?

public class Home_Screen extends Fragment implements BaseSliderView.OnSliderClickListener {

private SliderLayout mDemoSlider;
private static final String getURL = "";
HashMap<String, String> url_maps;

GridView gridview;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    mDemoSlider = getActivity().findViewById(R.id.slider);

    // Creating volley request obj
    JsonArrayRequest billionaireReq = new JsonArrayRequest(getURL,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    url_maps = new HashMap<String, String>();
                    // Parsing json
                    for (int i = 0; i < response.length(); i++) {
                        try {

                            JSONObject obj = response.getJSONObject(i);
                            url_maps.put(obj.getString("title") + " - " + obj.getString("releaseYear"), obj.getString("image"));

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }

                    for (String name : url_maps.keySet()) {
                        TextSliderView textSliderView = new TextSliderView(getActivity());
                        // initialize a SliderLayout
                        textSliderView
                                .description(name)
                                .descriptionSize(20)
                                .image(url_maps.get(name))
                                .setScaleType(BaseSliderView.ScaleType.CenterCrop)
                                .setOnSliderClickListener(Home_Screen.this);

                        //add your extra information
                        textSliderView.bundle(new Bundle());
                        textSliderView.getBundle().putString("extra", name);

                        mDemoSlider.addSlider(textSliderView);
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getActivity().getApplicationContext(), "network issue: please enable wifi/mobile data", Toast.LENGTH_SHORT).show();
        }
    });

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(billionaireReq);

    mDemoSlider.setPresetTransformer(SliderLayout.Transformer.Stack);
    mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Top);
    mDemoSlider.setCustomAnimation(new DescriptionAnimation());
    mDemoSlider.setDuration(4000);

    mDemoSlider.setPresetTransformer("Stack");

    // Inflate the layout for this photo
    View view = inflater.inflate(R.layout.home_screen, container, false);
    gridview = (GridView) view.findViewById(R.id.customgrid);
    gridview.setAdapter(new CustomAdapter(getActivity(), osNameList, osImages));
    gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

            final Intent intent;
            switch(position)
            {
                case 0:
                    intent =  new Intent(v.getContext(), IntroActivity.class);
                    break;

                case 1:
                    intent =  new Intent(v.getContext(), WadaActivity.class);
                    break;

                case 2:
                    intent =  new Intent(v.getContext(), InfoActivity.class);
                    break;
            }
            startActivity(intent);


        }

    });
    return view;

}

}

генерируется следующая ошибка

Information:Gradle tasks [:app:assembleDebug]
C:\AndroidApp\app\src\main\java\com\info\androidapp\Home_Screen.java
Error:(34, 8) error: Home_Screen is not abstract and does not override abstract method onSliderClick(BaseSliderView) in OnSliderClickListener
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
Information:BUILD FAILED in 5s

Мой файл макета, как показано ниже

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:custom="http://schemas.android.com/tools"
    android:orientation="vertical">

    <in.myinnos.imagesliderwithswipeslibrary.SliderLayout
        android:id="@+id/slider"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        custom:auto_cycle="true"
        custom:indicator_visibility="visible"
        custom:pager_animation="Stack"
        custom:pager_animation_span="1100" />

    <GridView
        android:id="@+id/customgrid"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/slider"
        android:numColumns="3"
        android:background="@color/ColorPrimary"
        android:textColor="@color/white"
        android:paddingTop="20dp"
        android:paddingLeft="30dp"
        android:verticalSpacing="20dp" />
</RelativeLayout>

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

проверьте это:

public class Home_Screen extends Fragment implements BaseSliderView.OnSliderClickListener {

private SliderLayout mDemoSlider;
private static final String getURL = "";
HashMap<String, String> url_maps;

GridView gridview;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


    // Inflate the layout for this photo
    View view = inflater.inflate(R.layout.home_screen, container, false);
    gridview = (GridView) view.findViewById(R.id.customgrid);
    gridview.setAdapter(new CustomAdapter(getActivity(), osNameList, osImages));
    gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

            final Intent intent;
            switch(position)
            {
                case 0:
                    intent =  new Intent(v.getContext(), IntroActivity.class);
                    break;

                case 1:
                    intent =  new Intent(v.getContext(), WadaActivity.class);
                    break;

                case 2:
                    intent =  new Intent(v.getContext(), InfoActivity.class);
                    break;
            }
            startActivity(intent);


        }

    });

mDemoSlider = view.findViewById(R.id.slider);

    // Creating volley request obj
    JsonArrayRequest billionaireReq = new JsonArrayRequest(getURL,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    url_maps = new HashMap<String, String>();
                    // Parsing json
                    for (int i = 0; i < response.length(); i++) {
                        try {

                            JSONObject obj = response.getJSONObject(i);
                            url_maps.put(obj.getString("title") + " - " + obj.getString("releaseYear"), obj.getString("image"));

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }

                    for (String name : url_maps.keySet()) {
                        TextSliderView textSliderView = new TextSliderView(getActivity());
                        // initialize a SliderLayout
                        textSliderView
                                .description(name)
                                .descriptionSize(20)
                                .image(url_maps.get(name))
                                .setScaleType(BaseSliderView.ScaleType.CenterCrop)
                                .setOnSliderClickListener(Home_Screen.this);

                        //add your extra information
                        textSliderView.bundle(new Bundle());
                        textSliderView.getBundle().putString("extra", name);

                        mDemoSlider.addSlider(textSliderView);
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getActivity().getApplicationContext(), "network issue: please enable wifi/mobile data", Toast.LENGTH_SHORT).show();
        }
    });

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(billionaireReq);

    mDemoSlider.setPresetTransformer(SliderLayout.Transformer.Stack);
    mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Top);
    mDemoSlider.setCustomAnimation(new DescriptionAnimation());
    mDemoSlider.setDuration(4000);

    mDemoSlider.setPresetTransformer("Stack");


    return view;

}

@override
 public void onSliderClick(BaseSliderView slider){
//do some thing
}
}
0 голосов
/ 28 апреля 2018

Ваш класс должен реализовать BaseSliderView.OnSliderClickListener этот интерфейс.

public class Home_Screen extends Fragment implements **BaseSliderView.OnSliderClickListener** {

Таким образом, существует два способа решения этой проблемы:

  1. удалить implements BaseSliderView.OnSliderClickListener и создать экземпляр, который реализует этот интерфейс. Используйте вместо Home_Screen.this в setOnSliderClickListener.

  2. найти метод OnSliderClickListener в активности или baseActivity. И скопировать его во фрагмент.

...