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 文件有问题。 TextView
与 EditText
重叠,EditText
与 ListView
进一步重叠,并且您的 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结果如下-
编码愉快!
我希望能够扫描标签,然后将此数据填充到列表视图中。我成功地做到了这一点。
但是我不想为了 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 文件有问题。 TextView
与 EditText
重叠,EditText
与 ListView
进一步重叠,并且您的 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结果如下-
编码愉快!