Android 搜索在传递另一个活动时不准确



Android 搜索在传递另一个活动时不准确。

这是我的应用程序

这是主页

[主要] https://drive.google.com/open?id=0B2SE2JZYuezja2JqRHcycWdhWTA

当我搜索一个单词时,将显示第一个数组描述,并且描述不准确。

这与我单击
的输出相同[相同的输出]https://drive.google.com/open?id=0B2SE2JZYuezjQmNFSm45RHloT3c


这是我的代码

主活动.java

package com.skholingua.android.searchview;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater.Filter;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SearchView;
public class MainActivity extends Activity implements
        SearchView.OnQueryTextListener {
    String[] stateList;
    String[] anotherStringArray; 
    private SearchView searchView;
    private ListView listView;
    private ArrayAdapter<String> adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        searchView = (SearchView) findViewById(R.id.searchView1);
        listView = (ListView) findViewById(R.id.listView1);
        stateList = getResources().getStringArray(R.array.stateList);
        anotherStringArray = getResources().getStringArray(R.array.anotherStringArray);
        adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, stateList);
        listView.setAdapter(adapter);
        listView.setTextFilterEnabled(true);

        // Sets the default or resting state of the search field.
        // If true, a single search icon is shown by default and
        // expands to show the text field and other buttons when pressed
        //searchView.setIconifiedByDefault(false);
        searchView.setOnQueryTextListener(this);
        // Sets the hint text to display in the query text field
        //searchView.setQueryHint("State Name");
        int searchPlateId = searchView.getContext().getResources()
                .getIdentifier("android:id/search_plate", null, null);
        View searchPlateView = searchView.findViewById(searchPlateId);
        if (searchPlateView != null) {
            searchPlateView.setBackgroundColor(Color.TRANSPARENT);
        }
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String stateName = listView.getAdapter().getItem(position).toString();
                // Put selected state to intent.
                Intent intent = new Intent(MainActivity.this, NextActivity.class);
                intent.putExtra("selectedState", stateName);
                intent.putExtra("anotherStringArray",anotherStringArray[position]);
                startActivity(intent);
            }
        });
    }

    @Override
        public boolean onQueryTextChange(String newText) {
            android.widget.Filter filter = adapter.getFilter();
            if (TextUtils.isEmpty(newText)) {
                filter.filter("");
            } else {
                filter.filter(newText);
            }
            return true;
        }
    @Override
    public boolean onQueryTextSubmit(String query) {
        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.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();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

活动.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:focusableInTouchMode="true"
    tools:context="com.skholingua.android.searchview.MainActivity" >
    <SearchView
        android:id="@+id/searchView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:background="@drawable/search_view_border"
        android:iconifiedByDefault="false"
        android:padding="2dp"
        android:queryHint="Search...."
        android:layout_alignParentTop="true" >
    </SearchView>
    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/searchView1"
        android:layout_centerHorizontal="true" >
    </ListView>
</RelativeLayout>

下一个活动.class

package com.skholingua.android.searchview;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class NextActivity extends Activity {
    TextView t1,t2;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.next);  
        t1 = (TextView) findViewById(R.id.name1);
        t2 = (TextView) findViewById(R.id.name2);
        Intent intent = getIntent();
        String state_name= getIntent().getExtras().getString("selectedState");
        String stateDescription= getIntent().getExtras().getString("anotherStringArray");
        t1.setText(state_name); 
        t2.setText(stateDescription);
    }
}

接下来.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#00ffff"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
     >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" 
            android:layout_margin="10dp"
            >
            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Word:"
                android:typeface="serif"
                android:textColor="#000"
                android:textSize="19dp" />
            <TextView
                android:id="@+id/name1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text=""
                android:textColor="#f00"
                android:textSize="18dp"
                android:typeface="serif" />
        </LinearLayout>
        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="10dp"
            android:textColor="#000"
            android:typeface="serif"
            android:text="Definition:"
            android:textSize="19dp" />
        <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
        <TextView
            android:id="@+id/name2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textColor="#000"
            android:padding="10dp"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="10dp"
            android:text=""
            android:background="#fff"
            android:textAppearance="?android:attr/textAppearanceMedium" />

       </ScrollView> 
    </LinearLayout>

</RelativeLayout>

字符串.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">SearchView</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <string-array name="stateList">
        <item>Abstract Window Toolkit (AWT)</item>
        <item>abstract</item>
        <item>abstract class</item>
        <item>abstract method</item>
        <item>access control</item>
        <item>ACID</item>
        <item>activation</item>
        <item>actual parameter list</item>
        <item>alpha value</item>
    </string-array>

     <string-array name="anotherStringArray">
        <item>A collection of graphical user interface (GUI) components that were implemented usingnative-platform versions of the components. These components provide that subset of functionalitywhich is common to all native platforms. Largely supplanted by the Project Swing component set.</item>
        <item>A Java(TM) programming language keyword used in a class definition to specify that a class is not to be instantiated, but rather inherited by other classes. An abstract class can have abstract method that are not implemented in the abstract class, but in subclasses.</item>
        <item>A class that contains one or more abstract methods, and therefore can never be instantiated. Abstract classes are defined so that other classes can extend them and make them concrete by implementing the abstract methods.</item>
        <item>A method that has no implementation.</item>
        <item>The methods by which interactions with resources are limited to collections of users or programs for the purpose of enforcing integrity, confidentiality, or availability constraints.</item>
        <item>The acronym for the four properties guaranteed by transactions: atomicity, consistency, isolation,and durability.</item>
        <item>The process of transferring an enterprise bean from secondary storage to memory.</item>

    </string-array>
</resources>

我希望你能帮助我解决这个问题.谢谢。

这是您的解决方案。

首先将主活动列表视图.setOnItemClickListener=> onItemClick 方法替换为以下代码

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String stateName = listView.getAdapter().getItem(position).toString();
            int pos=0;
            for(int i=0;i<stateList.length;i++)
            {
                if(stateList[i].equals(stateName))
                {
                    pos=i;
                    break;
                }
            }
            // Put selected state to intent.
            Intent intent = new Intent(MainActivity.this, NextActivity.class);
            intent.putExtra("selectedState", stateName);
            intent.putExtra("anotherStringArray", anotherStringArray[pos]);
            startActivity(intent);
        }
    });

并且还要使您的stateList数组和另一个StringArray在string.xml文件中的大小相同。

<string-array name="stateList">
    <item>Abstract Window Toolkit (AWT)</item>
    <item>abstract</item>
    <item>abstract class</item>
    <item>abstract method</item>
    <item>access control</item>
    <item>ACID</item>
    <item>activation</item>
    <item>actual parameter list</item>
    <item>alpha value</item>
</string-array>

<string-array name="anotherStringArray">
    <item>A collection of graphical user interface (GUI) components that were implemented usingnative-platform versions of the components. These components provide that subset of functionalitywhich is common to all native platforms. Largely supplanted by the Project Swing component set.</item>
    <item>A Java(TM) programming language keyword used in a class definition to specify that a class is not to be instantiated, but rather inherited by other classes. An abstract class can have abstract method that are not implemented in the abstract class, but in subclasses.</item>
    <item>A class that contains one or more abstract methods, and therefore can never be instantiated. Abstract classes are defined so that other classes can extend them and make them concrete by implementing the abstract methods.</item>
    <item>A method that has no implementation.</item>
    <item>The methods by which interactions with resources are limited to collections of users or programs for the purpose of enforcing integrity, confidentiality, or availability constraints.</item>
    <item>The acronym for the four properties guaranteed by transactions: atomicity, consistency, isolation,and durability.</item>
    <item>The process of transferring an enterprise bean from secondary storage to memory.</item>
    <item>Add your text here</item>
    <item>Add some other text here</item>
</string-array>

最新更新