Запуск нового намерения при нажатии на дочерний элемент просмотра Recycler

Я пытаюсь начать новое действие, как только пользователь щелкает элемент recyclerview в моем приложении. Но, к сожалению, происходит сбой. Я включил все соответствующие коды ниже для диагностики. Было бы полезно, если бы мне здесь помогли. Кроме того, где мне добавить метод onClick для запуска new intent? В настоящее время я поместил намерение в метод onInterceptTouchEvent().

public class view extends AppCompatActivity {
List<DataAdapter> DataAdapterClassList;

RecyclerView recyclerView;

RecyclerView.LayoutManager recyclerViewlayoutManager;

RecyclerView.Adapter recyclerViewadapter;

ProgressBar progressBar;

JsonArrayRequest jsonArrayRequest ;

ArrayList<String> EmployeeNames;

RequestQueue requestQueue ;

String HTTP_SERVER_URL = "http://andoirdapp.000webhostapp.com/EmployeeDetails.php";

View ChildView ;

List<String> IdList = new ArrayList<>();

int RecyclerViewClickedItemPOS ;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_view);

    DataAdapterClassList = new ArrayList<>();

    EmployeeNames = new ArrayList<>();

    recyclerView = findViewById(R.id.recyclerView1);

    progressBar = findViewById(R.id.progressBar);

    recyclerView.setHasFixedSize(true);

    recyclerViewlayoutManager = new LinearLayoutManager(this);

    recyclerView.setLayoutManager(recyclerViewlayoutManager);

    // JSON data web call function call from here.
    JSON_WEB_CALL();

    //RecyclerView Item click listener code starts from here.
    recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {

        GestureDetector gestureDetector = new GestureDetector(view.this, new GestureDetector.SimpleOnGestureListener() {

            @Override public boolean onSingleTapUp(MotionEvent motionEvent) {

                return true;
            }

        });
        @Override
        public boolean onInterceptTouchEvent(RecyclerView Recyclerview, MotionEvent motionEvent) {

            ChildView = Recyclerview.findChildViewUnder(motionEvent.getX(), motionEvent.getY());

            if (ChildView != null && gestureDetector.onTouchEvent(motionEvent)) {

                //Getting RecyclerView Clicked item value.
                RecyclerViewClickedItemPOS = Recyclerview.getChildAdapterPosition(ChildView);

                Intent intent = new Intent (view.this,ShowSingleRecordActivity.class);

                intent.putExtra("ListViewValue", IdList.get(RecyclerViewClickedItemPOS));

                startActivity(intent);

                finish();

                //Printing RecyclerView Clicked item clicked value using Toast Message.
                Toast.makeText(view.this, EmployeeNames.get(RecyclerViewClickedItemPOS), Toast.LENGTH_LONG).show();

            }

            return false;
        }

        @Override
        public void onTouchEvent(RecyclerView Recyclerview, MotionEvent motionEvent) {

        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

        }
    });

}

public void JSON_WEB_CALL(){

    jsonArrayRequest = new JsonArrayRequest(HTTP_SERVER_URL,

            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    JSON_PARSE_DATA_AFTER_WEBCALL(response);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            });

    requestQueue = Volley.newRequestQueue(this);

    requestQueue.add(jsonArrayRequest);
}

public void JSON_PARSE_DATA_AFTER_WEBCALL(JSONArray array){

    for(int i = 0; i<array.length(); i++) {

        DataAdapter GetDataAdapter2 = new DataAdapter();

        JSONObject json = null;
        try {
            json = array.getJSONObject(i);

            //GetDataAdapter2.setId(json.getInt("id"));

            GetDataAdapter2.setEmployeeNumber(json.getString("EmployeeNumber"));

            GetDataAdapter2.setEmployeeName(json.getString("EmployeeName"));

            //Adding subject name here to show on click event.
            EmployeeNames.add(json.getString("EmployeeName"));

            GetDataAdapter2.setDesignation(json.getString("Designation"));

            GetDataAdapter2.setDepartment(json.getString("Department"));

            GetDataAdapter2.setGrade(json.getString("Grade"));

            GetDataAdapter2.setSection(json.getString("Section"));

            GetDataAdapter2.setApplicationDetails(json.getString("ApplicationDetails"));

            GetDataAdapter2.setDateOfAppointment(json.getString("DateOfAppointment"));

            GetDataAdapter2.setSeniorityNumber(json.getString("SeniorityNumber"));

            GetDataAdapter2.setSeniorityGrade(json.getString("SeniorityGrade"));

            GetDataAdapter2.setSeniorityDivision(json.getString("SeniorityDivision"));

            GetDataAdapter2.setRequestIsFor(json.getString("RequestIsFor"));

            GetDataAdapter2.setPresentAddress(json.getString("PresentAddress"));

            GetDataAdapter2.setContactNumber(json.getString("ContactNumber"));

            GetDataAdapter2.setRemarks(json.getString("Remarks"));

            GetDataAdapter2.setQuarterPreference(json.getString("QuarterPreference"));



        }
        catch (JSONException e)
        {

            e.printStackTrace();
        }

        DataAdapterClassList.add(GetDataAdapter2);

    }

    progressBar.setVisibility(View.GONE);

    recyclerViewadapter = new RecyclerViewAdapter(DataAdapterClassList, this);

    recyclerView.setAdapter(recyclerViewadapter);
}
}

Сообщения об ошибках :

07-14 09:32:26.467 9306-9306/com.kavyabarnadhyahazarika.quarterallotmentapp E/InputEventReceiver: Exception dispatching input event.
07-14 09:32:26.468 9306-9306/com.kavyabarnadhyahazarika.quarterallotmentapp E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
07-14 09:32:26.469 9306-9306/com.kavyabarnadhyahazarika.quarterallotmentapp E/MessageQueue-JNI: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        at java.util.ArrayList.get(ArrayList.java:411)
        at com.kavyabarnadhyahazarika.quarterallotmentapp.view$1.onClick(view.java:177)
        at com.kavyabarnadhyahazarika.quarterallotmentapp.view$1RecyclerTouchListener.onInterceptTouchEvent(view.java:153)
        at android.support.v7.widget.RecyclerView.dispatchOnItemTouch(RecyclerView.java:2916)
        at android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:3044)
        at android.view.View.dispatchTouchEvent(View.java:10039)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2628)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2307)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2634)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2634)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2634)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2634)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2634)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2634)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
        at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:417)
        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1808)
        at android.app.Activity.dispatchTouchEvent(Activity.java:3198)
        at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
        at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:379)
        at android.view.View.dispatchPointerEvent(View.java:10261)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4500)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4365)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3905)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3958)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3924)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4051)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3932)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4108)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3905)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3958)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3924)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3932)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3905)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6309)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6283)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6244)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6415)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:187)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:323)
        at android.os.Looper.loop(Looper.java:142)
        at android.app.ActivityThread.main(ActivityThread.java:6239)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
07-14 09:32:26.471 9306-9306/com.kavyabarnadhyahazarika.quarterallotmentapp E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.kavyabarnadhyahazarika.quarterallotmentapp, PID: 9306
    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        at java.util.ArrayList.get(ArrayList.java:411)
        at com.kavyabarnadhyahazarika.quarterallotmentapp.view$1.onClick(view.java:177)
        at com.kavyabarnadhyahazarika.quarterallotmentapp.view$1RecyclerTouchListener.onInterceptTouchEvent(view.java:153)
        at android.support.v7.widget.RecyclerView.dispatchOnItemTouch(RecyclerView.java:2916)
        at android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:3044)
        at android.view.View.dispatchTouchEvent(View.java:10039)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2628)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2307)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2634)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2634)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2634)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2634)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2634)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2634)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
        at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:417)
        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1808)
        at android.app.Activity.dispatchTouchEvent(Activity.java:3198)
        at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
        at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:379)
        at android.view.View.dispatchPointerEvent(View.java:10261)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4500)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4365)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3905)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3958)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3924)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4051)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3932)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4108)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3905)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3958)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3924)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3932)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3905)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6309)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6283)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6244)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6415)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:187)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:323)
        at android.os.Looper.loop(Looper.java:142)
        at android.app.ActivityThread.main(ActivityThread.java:6239)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)

Пожалуйста, сделайте поиск в гугле. здесь повторяющийся вопрос stackoverflow.com/questions/32338910/…

Samir Mangroliya 14.07.2018 06:37

Почему бы вам не добавить слушателя в свою активность для события касания. Это стандартный способ добавить событие касания.

Rohit Singh 14.07.2018 07:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
105
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы никогда не добавляете какие-либо записи в массив IdList, поэтому, когда вы пытаетесь получить запись из него с помощью IdList.get(...), вы получаете эту ошибку:

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

Сообщение об ошибке сообщает, что ваш массив пуст (размер = 0) и вы пытаетесь получить первую запись (индекс 0). Он даже сообщает вам, в какой строке это происходит (строка 177 в вашем вызове onClick)

at java.util.ArrayList.get(ArrayList.java:411)
at com.kavyabarnadhyahazarika.quarterallotmentapp.view$1.onClick(view.java:177)

Я использовал эту строку кода для заполнения массива IdList: intent.putExtra ("ListViewValue", IdList.get (RecyclerViewClickedItemPOS));

Kavya Barnadhya Hazarika 14.07.2018 14:52

Этот код ничего не помещает в IdList, который получает значение изIdList и пытается поместить его в intent. Чтобы вставить что-то в IdList, вы бы назвали что-то вроде IdList.add(thing);.

Tyler V 14.07.2018 15:00

Спасибо! Решил вопрос. В метод JSON добавлены эти две строки: GetDataAdapter2.setId (json.getInt ("id")); IdList.add (json.getString ("id"));

Kavya Barnadhya Hazarika 14.07.2018 15:35

Исключение составляет:

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

Исключение совершенно очевидно, что вы пытались получить доступ к некоторому индексу, которого нет в списке. Я заглянул в view.java и обнаружил следующий сбой. Вы пытаетесь получить данные из списка, не проверяя Arraylist (нулевой или пустой)

Ошибка в вашей строке intent.putExtra("ListViewValue", IdList.get(RecyclerViewClickedItemPOS));

вам нужно сначала проверить:

if (IdList.get(RecyclerViewClickedItemPOS)!= null && IdList.get(RecyclerViewClickedItemPOS) > 0)
{
intent.putExtra("ListViewValue", IdList.get(RecyclerViewClickedItemPOS));
}

(IdList.get (RecyclerViewClickedItemPOS)> 0. Это не сработает, поскольку IdList имеет "тип" String.

Kavya Barnadhya Hazarika 14.07.2018 14:51

Разберите это до целого числа @KavyaBarnadhyaHazarika

InsaneCat 14.07.2018 15:00

Вам нужно будет проверить RecyclerViewClickedIetmPOS < IdList.size(). Ваш код все равно будет генерировать ту же ошибку (IndexOutOfBounds)

Tyler V 14.07.2018 15:02

Другие вопросы по теме