Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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);
    }
}
like image 356
Gagana Lakruwan Avatar asked Sep 03 '18 11:09

Gagana Lakruwan


People also ask

How do I stop deleting the first character of edit text android?

There are a few ways you can achieve this. First, you can simply have it so that if the EditText block is empty, it is immediately repopulated with a "/" char. Alternatively, make it so that if the previous char is / , then prevent the user from deleting back.

How does OnClickListener work in android?

In Android, the OnClickListener() interface has an onClick(View v) method that is called when the view (component) is clicked. The code for a component's functionality is written inside this method, and the listener is set using the setOnClickListener() method.

What is the difference between edit text and text TextView android?

EditText is used for user input. TextView is used to display text and is not editable by the user. TextView can be updated programatically at any time.


3 Answers

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;
    }
});
like image 127
Chetan Shelake Avatar answered Nov 15 '22 06:11

Chetan Shelake


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
like image 23
Osvel Alvarez Jacomino Avatar answered Nov 15 '22 06:11

Osvel Alvarez Jacomino


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
       }
});
like image 28
Yogesh Katkar Avatar answered Nov 15 '22 05:11

Yogesh Katkar