Java 单击回收器视图子项时启动新意图

Java 单击回收器视图子项时启动新意图,java,android,android-recyclerview,Java,Android,Android Recyclerview,一旦用户单击我应用程序中的recyclerview项,我将尝试启动一个新活动。但不幸的是它崩溃了。我已将以下所有相关代码包含在诊断中。如果我能在这里得到一些帮助,那将很有帮助。另外,我必须在哪里添加启动新意图的onClick方法?目前,我已将意图放在onInterceptTouchEvent()方法下 public class view extends AppCompatActivity { List<DataAdapter> DataAdapterClassList; Recyc

一旦用户单击我应用程序中的
recyclerview
项,我将尝试启动一个新活动。但不幸的是它崩溃了。我已将以下所有相关代码包含在诊断中。如果我能在这里得到一些帮助,那将很有帮助。另外,我必须在哪里添加启动新意图的
onClick
方法?目前,我已将意图放在
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);
}
}

您从未将任何条目添加到数组
IdList
,因此当您尝试使用
IdList.get(…)
从中获取条目时,会出现以下错误:

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
错误消息告诉您数组为空(Size=0),您正在尝试获取第一个条目(索引0)。它甚至会告诉你它发生在哪一行(第177行,在你的
onClick
调用中)

例外情况是:

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
异常很明显,您试图访问列表中不可用的某些索引。我查看了
视图.java
后发现了以下问题。您正在尝试从列表中获取数据,而不验证Arraylist(空或空)

intent.putExtra(“ListViewValue”,IdList.get(RecycleServiceClickEditEmpos))中出错

您需要首先检查:

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

请在谷歌搜索。这里有一个重复的问题,为什么不在touch事件的活动中添加一个侦听器呢。这是添加触摸事件的标准方法。(IdList.get(RecycleServiceClickEditEmpos)>0。由于IdList是字符串“类型”,因此此方法不起作用。将其解析为整数@kavyabarnadhayahazarikayou需要检查
RecycleServiceClickEdietMPOS
您拥有的代码仍将生成相同的错误(IndexOutOfBounds)我已经使用这行代码填充了IdList:intent.putExtra(“ListViewValue”,IdList.get(RecycleServiceClickEditeMPOS))的数组;该代码没有将任何内容放入
IdList
,它从
IdList
获取一个值,并尝试将其放入
intent
中。要将某个内容放入
IdList
中,您可以调用类似
IdList.add(thing);
谢谢!我解决了这个问题。在JSON方法中添加了这两行:GetDataAdapter2.setId(json.getInt(“id”);IdList.add(json.getString(“id”));
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
if(IdList.get(RecyclerViewClickedItemPOS)!= null && IdList.get(RecyclerViewClickedItemPOS) > 0)
{
intent.putExtra("ListViewValue", IdList.get(RecyclerViewClickedItemPOS));
}