我正在尝试在编辑文本的textchanged事件上设置微调器的项目。但是我可以在textchanged事件上举杯,但不能设置微调框的选择
我想制作一个让客户可以从微调器列表中选择项目的应用程序 客户也可以搜索该项目,并通过在编辑文本中输入该项目的特定部分,将其设置在微调器中。
Members_Spinner=findViewById(R.id.spinner_Members);
List<String> Members = hlpr.getParty();
membersArrayAdapter=new ArrayAdapter<String>(
this,R.layout.spinner_layout_left,Members
);
membersArrayAdapter.setDropDownViewResource((R.layout.spinner_layout_left));
Members_Spinner.setAdapter((membersArrayAdapter));
etmemCode=findViewById(R.id.etMemCode);
etmemCode.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) {
String a = s.toString();
// This is working ----
//Toast.makeText(activity_milk_purchase.this, a, Toast.LENGTH_SHORT).show();
loadMember(a);----- this is not working...
}
@Override
public void afterTextChanged(Editable s) {
}
});
public void loadMember(String idTxt){
int b=idTxt.length();
if (b > 0) {
for (int position = 0; position < membersArrayAdapter.getCount(); position++) {
String c = membersArrayAdapter.getItem(position).toString();
String d = c.substring(0, b);
if (d == idTxt) {
Members_Spinner.setSelection(position);
}
}
}
}
XML
<EditText
android:id="@+id/etMemCode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/spinner_Session"
android:hint="CODE"
android:textSize="24dp"
android:textAlignment="center"
android:layout_margin="25dp"
android:inputType="number"/>
<Spinner
android:id="@+id/spinner_Members"
android:layout_below="@id/etMemCode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="25dp"
android:layout_marginRight="25dp"
android:padding="10dp"/>
Log Cat - Error:
2019-02-19 16:04:29.949 13005-13005/com.ksheera.lsstech.ksheerasagara
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ksheera.lsstech.ksheerasagara, PID: 13005
java.lang.StringIndexOutOfBoundsException: length=0; regionStart=0; regionLength=1
at java.lang.String.substring(String.java:1931)
at com.ksheera.lsstech.ksheerasagara.activity_milk_purchase.loadMember(activity_milk_purchase.java:69)
at com.ksheera.lsstech.ksheerasagara.activity_milk_purchase$2.onTextChanged(activity_milk_purchase.java:87)
at android.widget.TextView.sendOnTextChanged(TextView.java:8560)
at android.widget.TextView.handleTextChanged(TextView.java:8625)
at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:10784)
at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1226)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:591)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:520)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:519)
at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:121)
at android.widget.TextView.doKeyDown(TextView.java:6429)
at android.widget.TextView.onKeyDown(TextView.java:6219)
at android.view.KeyEvent.dispatch(KeyEvent.java:2754)
at android.view.View.dispatchKeyEvent(View.java:9972)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1697)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1697)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1697)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1697)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1697)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1697)
at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:427)
at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1822)
at android.support.v4.view.KeyEventDispatcher.activitySuperDispatchKeyEventPre28(KeyEventDispatcher.java:130)
at android.support.v4.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:87)
at android.support.v4.app.SupportActivity.dispatchKeyEvent(ComponentActivity.java:126)
at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:535)
at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
at android.support.v7.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:2533)
at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:334)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4812)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4777)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4288)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4341)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4307)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4454)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4315)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4511)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4288)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4341)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4307)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4315)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4288)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6812)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6786)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6729)
at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:4074)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:208)
at android.app.ActivityThread.main(ActivityThread.java:6267)
2019-02-19 16:04:29.950 13005-13005/com.ksheera.lsstech.ksheerasagara E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
答案 0 :(得分:0)
我以为@ManishPrajapati是正确的建议.equals()而不是==。但是您说您尝试了所有操作,但没有成功。因此,我像您一样制作了整个场景,使用.equals()可以正常工作。并且在这里无法使用==。这是我的完整代码。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:layout_margin="16dp"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:id="@+id/edittext_planet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:hint="Type text for spinner" />
<Spinner
android:id="@+id/spinner_planet"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
private EditText planetEdittext;
private Spinner planetSpinner;
private List<String> planetList = new ArrayList<>();
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
planetEdittext=findViewById(R.id.edittext_planet);
planetSpinner=findViewById(R.id.spinner_planet);
planetEdittext.addTextChangedListener(textWatcher);
planetList.add("Mercury");
planetList.add("Venus");
planetList.add("Earth");
planetList.add("Mars");
planetList.add("Jupiter");
planetList.add("Saturn");
adapter =new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, planetList) ;
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
planetSpinner.setAdapter(adapter);
}
public void loadSpinnerData(String planetName)
{
for(int position=0;position<adapter.getCount();++position)
{
if(planetName.equals(adapter.getItem(position).toString()))
{
planetSpinner.setSelection(position);
}
}
}
TextWatcher textWatcher = 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) {
loadSpinnerData(s.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
};
}
请确保您输入的编辑文本与列表(金星/水星)中的行星名称完全相同,因为我不会区分大小写。