Android Edit text onclicklistener doesn't work the first time when clicked
Asked Answered
H

4

14

I wrote function using onClick method to EditText, load data to RecycleView. When click EditText load all data to AlertBox and if click one. Then load all data to RecycleView according to it. First time it doesn't show, but again I click EditText and select data from AlertBox then show details in RecycleView

activity_day_plan.xml

<EditText
        android:id="@+id/txtline"
        android:layout_width="156dp"
        android:layout_height="33dp"
        android:clickable="true"
        android:focusable="false"
        android:focusableInTouchMode="false"

        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="12dp"
        android:background="@drawable/input"
        android:ems="10"
        android:inputType="textPersonName"
        android:textAlignment="center"
        app:layout_constraintEnd_toStartOf="@+id/btnview"
        app:layout_constraintStart_toEndOf="@+id/txtfactoryname"
        app:layout_constraintTop_toBottomOf="@+id/txtfac" />

Main Activity

private EditText addline;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_day_plan);

    addline=(EditText)findViewById(R.id.txtline);

    addline.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            getlist();
        }
    });
}

public void getlist()
{
    arrayList.clear();
    if(addfac.getText().equals(""))
    {
        Toast.makeText(DayPlanActivity.this,"Please Select Factory Code",Toast.LENGTH_SHORT).show();
    }
    else if(addline.getText().equals(""))
    {
        Toast.makeText(DayPlanActivity.this,"Please Select Line Code",Toast.LENGTH_SHORT).show();
    }
    else {
        loadingbar.setMessage("Loading All Line Details");
        StringRequest stringRequest = new StringRequest(Request.Method.POST, Constants.GETDALYDETAILS_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONArray jsonArray = new JSONArray(response);
                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject jsonObject = jsonArray.getJSONObject(i);
                                String hourcode1 = jsonObject.getString("hour_code");
                                String prodqty = jsonObject.getString("qrytime");
                                String datetime = jsonObject.getString("hourqty");
                                gethourdetails gethour = new gethourdetails(hourcode1, prodqty, datetime);
                                arrayList.add(gethour);
                            }
                            adapter = new ContactAdapter(arrayList);
                            recyclerView.setAdapter(adapter);
                            loadingbar.dismiss();
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Hours.setText("Something Went Wrong Please Try again later....");
                error.printStackTrace();
            }
        }) {
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("username", username);
                params.put("qno", qno);
                return params;
            }
        };
        stringRequest.setRetryPolicy(new DefaultRetryPolicy(
                60000,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        MySingleton.getInstance(getApplicationContext()).addToRequestque(stringRequest);
    }
}
Healthful answered 3/9, 2018 at 11:36 Comment(1)
Possible duplicate of onClick event is not triggering | AndroidCanvas
L
10

All you need to do is disable focus on that view and your view will react the first click.

In XML

<androidx.appcompat.widget.AppCompatEditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusable="false" <!--this line does the magic -->
        android:gravity="top" />

In Java

    EditText editText = findViewById(R.id.username);
    editText.setFocusable(false);

In Kotlin

    val editText = findViewById<EditText>(R.id.edit_text)
    editText.isFocusable = false
Lederer answered 11/2, 2021 at 16:12 Comment(0)
P
16

Use onTouchListener instead of onClickListener

addline.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_UP) {
            getlist();
            return true;
        }
        return false;
    }
});
Prolamine answered 3/9, 2018 at 11:44 Comment(0)
L
10

All you need to do is disable focus on that view and your view will react the first click.

In XML

<androidx.appcompat.widget.AppCompatEditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusable="false" <!--this line does the magic -->
        android:gravity="top" />

In Java

    EditText editText = findViewById(R.id.username);
    editText.setFocusable(false);

In Kotlin

    val editText = findViewById<EditText>(R.id.edit_text)
    editText.isFocusable = false
Lederer answered 11/2, 2021 at 16:12 Comment(0)
R
5

Use onFocusChangeListener instead of onClickListener:

yourEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
       @Override
       public void onFocusChange(View view, boolean b) {
             if (b)
                // do your stuff here if b is true
       }
});
Rajasthani answered 3/9, 2018 at 12:14 Comment(0)
F
-1

You are not able to use click event in properly to the Edittext. Because your first click is receiving like a cursor focus listener. So you have to use onTouch listener or you have tried the another hacking

like

<ReleativeLayout
.
.

   <Edittext
   ..
    />

/>

Here you have to write click method to the relative layout. You may achieve your goal

Fugato answered 3/9, 2018 at 11:44 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.