通过输入数组

时间:2015-12-07 11:17:49

标签: java android android-studio android-arrayadapter android-spinner

我应该创建一个应用程序来生成一个状态下拉列表,该列表以用户输入的字母开头。该应用程序应该有一个文本输入字段和一个按钮(“搜索”)。它下面还应该有一个空的下拉列表。

所有美国州的名单应存储在数组中。

点击一个按钮后: 如果输入单个字母,则下拉列表中将填充以输入开头的数组中的状态名称 信件。如果没有输入任何一个或多个字母,则不应该做任何事情。

我对此时该做些什么感到迷茫和困惑。我尝试使用searchView,但我不确定这是否是正确的方法,因为它没有做任何类型的过滤,如果我点击按钮阵列只显示在下拉列表中,所有50无论在searchView中输入什么,都会显示状态。我几乎想知道我是否应该切换到只是一个textView ...但无论哪种方式,请帮助! (学期末即将结束,我的老师虽然说“请求帮助”甚至没有回复电子邮件... 叹息)这是我的代码:

Content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main" tools:context=".MainActivity">

    <Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/spinner"
        android:layout_below="@+id/button"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Look for States below"
        android:id="@+id/textView"
        android:textSize="30dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Search States"
        android:id="@+id/button"
        android:layout_below="@+id/searchView"
        android:layout_centerHorizontal="true"
        android:onClick="buttonOnClick"/>

    <SearchView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/searchView"
        android:layout_below="@+id/textView"
        android:layout_alignStart="@+id/button"
        android:queryHint="Search" />


</RelativeLayout>

MainActivity.Java:

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.SearchView;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

    SearchView searchView;
    Button stateLook;
    Spinner spinner;
    ArrayAdapter<CharSequence> adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        searchView = (SearchView)findViewById(R.id.searchView);
        stateLook = (Button) findViewById(R.id.button);


    };



    public void buttonOnClick(View v) {
        Button button = (Button) v;
        Spinner spinner = (Spinner) findViewById(R.id.spinner);

        ArrayList states = new ArrayList();
        states.add("Alabama");
        states.add("Alaska");
        states.add("Arizona");
        states.add("Arkansas");
        states.add("California");
        states.add("Colorado");
        states.add("Connecticut");
        states.add("Delaware");
        states.add("Florida");
        states.add("Georgia");
        states.add("Hawaii");
        states.add("Idaho");
        states.add("Illinois");
        states.add("India");
        states.add("Iowa");
        states.add("Kansas");
        states.add("Kentucky");
        states.add("Louisiana");
        states.add("Maine");
        states.add("Maryland");
        states.add("Massachusetts");
        states.add("Michigan");
        states.add("Minnesota");
        states.add("Mississippi");
        states.add("Missouri");
        states.add("Montana");
        states.add("Nebraska");
        states.add("Nevada");
        states.add("New Hampshire");
        states.add("New Jersey");
        states.add("New Mexico");
        states.add("New York");
        states.add("North Carolina");
        states.add("North Dakota");
        states.add("Ohio");
        states.add("Oklahoma");
        states.add("Oregon");
        states.add("Pennsylvania");
        states.add("Rhode Island");
        states.add("South Carolina");
        states.add("South Dakota");
        states.add("Tennessee");
        states.add("Texas");
        states.add("Utah");
        states.add("Vermont");
        states.add("Virgina");
        states.add("Washington");
        states.add("West Virgina");
        states.add("Wisconsin");
        states.add("Wyoming");

        final
       ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, states);
       adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(this);


        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {

                 adapter.getFilter().filter(newText);

                return false;
            }
        });


    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        TextView myText = (TextView) view;
        Toast.makeText(this, "You Selected "+ myText.getText(), Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }
}

1 个答案:

答案 0 :(得分:1)

好吧......比做一个edittext和一个按钮。点击按钮用适当的过滤数据填充你的适配器。

对于前。

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
    <Edittext
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Look for States below"
        android:id="@+id/search"
        android:maxLength="1"
        android:textSize="30dp"
 />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Search States"
        android:id="@+id/button"
        android:layout_below="@+id/searchView"
        android:layout_centerHorizontal="true"
        android:onClick="buttonOnClick"/>

<Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/spinner"
        android:layout_below="@+id/button"
 />
</LinearLayout>

在Java代码中

public void buttonOnClick(View v) {
        Button button = (Button) v;
        Spinner spinner = (Spinner) findViewById(R.id.spinner);

        ArrayList states = new ArrayList();

        //fill your list with only matching criteria by any query


}