在编辑文本的文本更改事件上设置微调框的选定项目

时间:2019-02-15 07:59:28

标签: android

我正在尝试在编辑文本的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)

1 个答案:

答案 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) {
    }
};
}

请确保您输入的编辑文本与列表(金星/水星)中的行星名称完全相同,因为我不会区分大小写。