Return 光标到起始位置

Return cursor to starting position

我希望能够扫描标签,然后将此数据填充到列表视图中。我成功地做到了这一点。

但是我不想为了 return 光标返回而继续点击 editText。扫描是在模拟器模式下设置的,因此当您扫描标签时,标签的信息会在光标所在的位置填充。

我遇到的问题是,一旦我扫描标签,光标不会自动 return 返回到 editText,这意味着当我想阅读另一个标签时,我必须按住 editText 以便光标到return到这个地方

listview 从editText 获取数据。下面显示了代码以及我现在拥有的图片。从图片中可以看出,光标无法自动返回到editText。

 public class MainActivity extends AppCompatActivity {

 EditText etRfidNo;
 TextView textView;
 private Set<String> epc = new HashSet<>();
 ArrayAdapter<String> contactAdapter;
 String single_epc;
 Button scan;
 ListView listView;
 boolean set = true;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView = (TextView)findViewById(R.id.textView);
    etRfidNo = (EditText) findViewById(R.id.etRfidNo);
    listView = (ListView) findViewById(R.id.listviewID);

    TextView textV = (TextView)findViewById(R.id.textView);

    etRfidNo.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            single_epc = String.valueOf(s);
            if(s.length() == 10)
            {
                Date currentDate = new Date();
                epc.add("\n" + etRfidNo.getText().toString() + ", " + DateFormat.getInstance().format(currentDate));
                display();
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
 }

 public void display() {
    contactAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<>(epc));

    listView.setAdapter(contactAdapter);

  }

}

Starting the application

Data populated on listview

Xml:

  <?xml version="1.0" encoding="utf-8"?>
  <android.support.constraint.ConstraintLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="com.example.name.myapplication.MainActivity">

<TextView
    android:id="@+id/textView"
    android:layout_width="201dp"
    android:layout_height="53dp"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:cursorVisible="true"
    android:text="TextView"
    android:textAlignment="center"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintHorizontal_bias="0.502"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.83" />

<EditText
    android:id="@+id/etRfidNo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:contextClickable="false"
    android:ems="10"
    android:inputType="text"
    android:selectAllOnFocus="false"
    android:textAlignment="center"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintHorizontal_bias="0.503"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.017" />

<Button
    android:id="@+id/scan"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="8dp"
    android:onClick="scan"
    android:text="Button"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/textView" />

 <ListView
     android:id="@+id/listviewID"
     android:layout_width="368dp"
     android:layout_height="282dp"
     android:layout_marginBottom="8dp"
     android:layout_marginTop="8dp"
     app:layout_constraintBottom_toBottomOf="parent"
     app:layout_constraintTop_toTopOf="parent"
     app:layout_constraintVertical_bias="0.276"
     tools:layout_editor_absoluteX="8dp" />
 </android.support.constraint.ConstraintLayout>

您需要在扫描每个标签后将焦点放在您的 editText 视图上,这样光标将在没有用户输入的情况下显示

editText.requestFocus();

代码如下-

public void onTextChanged(CharSequence s, int start, int before, int count) {

            single_epc = String.valueOf(s);
            if(s.length() == 10)
            {
                Date currentDate = new Date();
                epc.add("\n" + etRfidNo.getText().toString() + ", " + DateFormat.getInstance().format(currentDate));
                display();
                etRfidNo.requestFocus();      //Putting focus back
            }
        }

编辑(修复 XML 的问题)

您的 xml 文件有问题。 TextViewEditText 重叠,EditTextListView 进一步重叠,并且您的 ListView 也没有设置水平约束。我建议您浏览 Constraint Layout Guide 以获取更多信息。

简而言之,当您将适配器附加到 ListView 时,它会自动获得焦点,因为 ListView 会成为 xml 中视图层次结构的第一个子节点。我已经将您的布局更新为使用简单的线性布局,代码如下 -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="201dp"
        android:layout_height="53dp"
        android:layout_margin="8dp"
        android:text="TextView"
        android:textAlignment="center"/>

    <EditText
        android:id="@+id/etRfidNo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:contextClickable="false"
        android:ems="10"
        android:inputType="text"
        android:selectAllOnFocus="false"
        android:textAlignment="center"/>

    <Button
        android:id="@+id/scan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:onClick="scan"
        android:text="Button"/>

    <ListView
        android:id="@+id/listviewID"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"/>
</LinearLayout>

以上xml结果如下-

编码愉快!