第一次单击时,Android Edit文本onclicklistener无效

时间:2018-09-03 11:36:11

标签: android android-volley

我使用onClick方法编写了函数到EditText,将数据加载到RecycleView。单击EditText时,如果单击,则将所有数据加载到AlertBox中。然后根据其将所有数据加载到RecycleView。第一次没有显示,但是我再次单击EditText并从AlertBox中选择数据,然后在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" />
  

主要活动

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);
    }
}

4 个答案:

答案 0 :(得分:4)

您需要做的就是在该视图上禁用 focus,您的视图将在第一次点击时做出反应。

在 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" />

在 Java 中

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

在科特林

    val editText = findViewById<EditText>(R.id.edit_text)
    editText.isFocusable = false

答案 1 :(得分:3)

使用onFocusChangeListener代替onClickListener

yourEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
       @Override
       public void onFocusChange(View view, boolean b) {
             if (b)
                // do your stuff here if b is true
       }
});

答案 2 :(得分:2)

使用onTouchListener代替onClickListener

addline.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_UP) {
            getlist();
            return true;
        }
        return false;
    }
});

答案 3 :(得分:0)

您无法在Edittext中正确使用click事件。因为您的第一次单击像光标焦点侦听器一样收到。因此,您必须使用onTouch listener或尝试了另一种黑客攻击

喜欢

<ReleativeLayout
.
.

   <Edittext
   ..
    />

/>

在这里,您必须将click方法写入相对布局。您可以实现自己的目标