Java Android SearchView小部件,其结果为列表项

Java Android SearchView小部件,其结果为列表项,java,android,xml,eclipse,searchview,Java,Android,Xml,Eclipse,Searchview,任何人都可以给我一个解决方案,告诉我如何使用searchView小部件(不在操作栏中)根据用户在searchView中键入的内容显示结果列表。 我是开发android应用程序的新手,我想尝试创建一个可以从数据库检索数据的简单应用程序 我试图从互联网上搜索,我找到了'searchView',我可以搜索数据我从internet复制代码并修改某些部分。我阅读了代码,实际上我理解了一些代码,但不是全部,现在从main活动,我看到了'onSearchRequested();',然后在操作栏中以搜索视图开始

任何人都可以给我一个解决方案,告诉我如何使用
searchView小部件(不在操作栏中)
根据用户在searchView中键入的内容显示结果列表。
我是开发android应用程序的新手,我想尝试创建一个可以从数据库检索数据的简单应用程序
我试图从互联网上搜索,我找到了
'searchView'
,我可以搜索数据
我从internet复制代码并修改某些部分。我阅读了代码,实际上我理解了一些代码,但不是全部,现在从
main活动
,我看到了
'onSearchRequested();',然后在操作栏中以
搜索视图开始意图
我试图通过在布局中放置一个searchView小部件来修改代码,我想用它来代替
'onSearchRequested();'但我是股票,不知道如何显示结果。

这是跑步的样子:
actionbar中的搜索视图


我想把它改成:
具有列表项结果但不在操作栏中的搜索视图

代码::

'MainActivity.java'//原始版本

public class MainActivity extends FragmentActivity{

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = (Button) findViewById(R.id.btn_search);    
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {           
                onSearchRequested();    // This will start eveything on button click            
            }
        });
    }
}
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name"
    android:hint="@string/search_hint"
    android:searchSettingsDescription="@string/search_settings"

    android:searchSuggestAuthority="in.wptrafficanalyzer.searchdialogdemo.CountryContentProvider"
    android:searchSuggestIntentAction="android.intent.action.VIEW"
    android:searchSuggestIntentData="content://in.wptrafficanalyzer.searchdialogdemo.CountryContentProvider/countries"
    android:searchSuggestSelection=" ?"
    android:searchSuggestThreshold="1"    

    android:includeInGlobalSearch="true" >
</searchable>
<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"    
    tools:context=".MainActivity" >

    <SearchView
        android:id="@+id/searchView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:iconifiedByDefault="false"
        android:imeOptions="actionSearch" >

    </SearchView>

    <Button
        android:id="@+id/btn_search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/searchView1"
        android:text="@string/search" />

</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="in.wptrafficanalyzer.searchdialogdemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <!--  Activity with SearchDialog enabled -->
        <activity
            android:name="in.wptrafficanalyzer.searchdialogdemo.MainActivity"
            android:label="@string/app_name" >            
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <!-- Enabling Search Dialog -->                      
            <meta-data 
                android:name="android.app.default_searchable"
                android:value=".SearchableActivity" />                        
        </activity>

        <!-- A Searchable activity, that handles the searches -->
        <activity 
            android:name=".SearchableActivity" >            
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>
            <meta-data 
                android:name="android.app.searchable"
                android:resource="@xml/searchable"/>            
        </activity>
        <!--  Activity that shows the country details -->
        <activity android:name=".CountryActivity" />
        <!-- Content Provider to query sqlite database -->
        <provider 
            android:name=".CountryContentProvider"  
            android:authorities="in.wptrafficanalyzer.searchdialogdemo.CountryContentProvider"
            android:exported="true" />        
    </application>

</manifest>
'MainActivity.java'//我已经修改了

public class MainActivity extends FragmentActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = (Button) findViewById(R.id.btn_search);    
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {           
                onSearchRequested();                
            }
        });


        SearchView searchView = (SearchView)findViewById(R.id.searchView1);

        //This is just some code trying to customize the SearchView 
        searchView.setQueryHint("Type Word...");
        int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null);
        View searchPlate = searchView.findViewById(searchPlateId);
        if (searchPlate!=null) {
            searchPlate.setBackgroundColor(Color.WHITE);
            int searchTextId = searchPlate.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
            TextView searchText = (TextView) searchPlate.findViewById(searchTextId);
            if (searchText!=null) {
                searchText.setTextColor(Color.DKGRAY);
                searchText.setHintTextColor(Color.LTGRAY);

            }
        }

        // and im stock here, dont now what next to do

    }
}
SearchableActivity.java//Nothings在此处修改

public class SearchableActivity extends FragmentActivity implements LoaderCallbacks<Cursor> {

    ListView mLVCountries;
    SimpleCursorAdapter mCursorAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_searchable);
        // Getting reference to Country List
        mLVCountries = (ListView)findViewById(R.id.lv_countries);       
        // Setting item click listener      
        mLVCountries.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent countryIntent = new Intent(getApplicationContext(), CountryActivity.class);
                // Creating a uri to fetch country details corresponding to selected listview item
                Uri data = Uri.withAppendedPath(CountryContentProvider.CONTENT_URI, String.valueOf(id));
                // Setting uri to the data on the intent
                countryIntent.setData(data);
                // Open the activity
                startActivity(countryIntent);
            }
        });
        // Defining CursorAdapter for the ListView      
        mCursorAdapter = new SimpleCursorAdapter(getBaseContext(),
                android.R.layout.simple_list_item_1,
                null,
                new String[] { SearchManager.SUGGEST_COLUMN_TEXT_1},
                new int[] { android.R.id.text1}, 0);
        // Setting the cursor adapter for the country listview
        mLVCountries.setAdapter(mCursorAdapter);
        // Getting the intent that invoked this activity
        Intent intent = getIntent();        
        // If this activity is invoked by selecting an item from Suggestion of Search dialog or 
        // from listview of SearchActivity
        if(intent.getAction().equals(Intent.ACTION_VIEW)){ 
            Intent countryIntent = new Intent(this, CountryActivity.class);
            countryIntent.setData(intent.getData());
            startActivity(countryIntent);
            finish();           
        }else if(intent.getAction().equals(Intent.ACTION_SEARCH)){ // If this activity is invoked, when user presses "Go" in the Keyboard of Search Dialog
            String query = intent.getStringExtra(SearchManager.QUERY);
            doSearch(query);
        }       
    }   
    private void doSearch(String query){
        Bundle data = new Bundle();
        data.putString("query", query);
        // Invoking onCreateLoader() in non-ui thread
        getSupportLoaderManager().initLoader(1, data, this);        
    }
    /** This method is invoked by initLoader() */
    @Override
    public Loader<Cursor> onCreateLoader(int arg0, Bundle data) {
        Uri uri = CountryContentProvider.CONTENT_URI;       
        return new CursorLoader(getBaseContext(), uri, null, null , new String[]{data.getString("query")}, null);   
    }
    /** This method is executed in ui thread, after onCreateLoader() */
    @Override
    public void onLoadFinished(Loader<Cursor> arg0, Cursor c) { 
        mCursorAdapter.swapCursor(c);       
    }
    @Override
    public void onLoaderReset(Loader<Cursor> arg0) {
        // TODO Auto-generated method stub      
    }       
}
公共类SearchableActivity扩展FragmentActivity实现LoaderCallbacks{
列表视图MLV国家;
SimpleCursorAdapter-mCursorAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_searchable);
//获取对国家/地区列表的引用
MLV国家=(列表视图)findViewById(R.id.lv_国家);
//设置项单击侦听器
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Intent countryIntent=新的Intent(getApplicationContext(),CountryActivity.class);
//创建uri以获取与所选listview项对应的国家/地区详细信息
Uri数据=Uri.withAppendedPath(CountryContentProvider.CONTENT_Uri,String.valueOf(id));
//将uri设置为意图上的数据
countryIntent.setData(数据);
//打开活动
星触觉(countryIntent);
}
});
//为ListView定义游标适配器
mCursorAdapter=新的SimpleCorsorAdapter(getBaseContext(),
android.R.layout.simple\u list\u item\u 1,
无效的
新字符串[]{SearchManager.SUGGEST_COLUMN_TEXT_1},
新的int[]{android.R.id.text1},0);
//为国家/地区列表视图设置光标适配器
mLVCountries.setAdapter(mCursorAdapter);
//获取调用此活动的意图
Intent=getIntent();
//如果通过从“搜索建议”对话框或
//从SearchActivity的列表视图
如果(intent.getAction().equals(intent.ACTION_视图)){
Intent countryIntent=新的Intent(this,CountryActivity.class);
countryIntent.setData(intent.getData());
星触觉(countryIntent);
完成();
}else if(intent.getAction().equals(intent.ACTION_SEARCH)){//如果调用此活动,当用户在搜索对话框的键盘上按“Go”时
String query=intent.getStringExtra(SearchManager.query);
数据搜索(查询);
}       
}   
私有void doSearch(字符串查询){
Bundle data=新Bundle();
data.putString(“查询”,query);
//在非ui线程中调用onCreateLoader()
getSupportLoaderManager().initLoader(1,数据,此);
}
/**此方法由initLoader()调用*/
@凌驾
公共加载器onCreateLoader(int arg0,捆绑数据){
Uri Uri=CountryContentProvider.CONTENT\u Uri;
返回新的游标装入器(getBaseContext(),uri,null,null,新字符串[]{data.getString(“查询”)},null);
}
/**此方法在ui线程中onCreateLoader()之后执行*/
@凌驾
public void onLoadFinished(加载程序arg0,光标c){
斯瓦普库索(c);
}
@凌驾
公共void onLoaderReset(加载程序arg0){
//TODO自动生成的方法存根
}       
}
活动\u searchable.xml
//这是列表项结果,我想在searchView下显示它作为结果

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/lv_countries"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />    
</LinearLayout>

searchable.xml

public class MainActivity extends FragmentActivity{

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = (Button) findViewById(R.id.btn_search);    
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {           
                onSearchRequested();    // This will start eveything on button click            
            }
        });
    }
}
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name"
    android:hint="@string/search_hint"
    android:searchSettingsDescription="@string/search_settings"

    android:searchSuggestAuthority="in.wptrafficanalyzer.searchdialogdemo.CountryContentProvider"
    android:searchSuggestIntentAction="android.intent.action.VIEW"
    android:searchSuggestIntentData="content://in.wptrafficanalyzer.searchdialogdemo.CountryContentProvider/countries"
    android:searchSuggestSelection=" ?"
    android:searchSuggestThreshold="1"    

    android:includeInGlobalSearch="true" >
</searchable>
<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"    
    tools:context=".MainActivity" >

    <SearchView
        android:id="@+id/searchView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:iconifiedByDefault="false"
        android:imeOptions="actionSearch" >

    </SearchView>

    <Button
        android:id="@+id/btn_search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/searchView1"
        android:text="@string/search" />

</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="in.wptrafficanalyzer.searchdialogdemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <!--  Activity with SearchDialog enabled -->
        <activity
            android:name="in.wptrafficanalyzer.searchdialogdemo.MainActivity"
            android:label="@string/app_name" >            
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <!-- Enabling Search Dialog -->                      
            <meta-data 
                android:name="android.app.default_searchable"
                android:value=".SearchableActivity" />                        
        </activity>

        <!-- A Searchable activity, that handles the searches -->
        <activity 
            android:name=".SearchableActivity" >            
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>
            <meta-data 
                android:name="android.app.searchable"
                android:resource="@xml/searchable"/>            
        </activity>
        <!--  Activity that shows the country details -->
        <activity android:name=".CountryActivity" />
        <!-- Content Provider to query sqlite database -->
        <provider 
            android:name=".CountryContentProvider"  
            android:authorities="in.wptrafficanalyzer.searchdialogdemo.CountryContentProvider"
            android:exported="true" />        
    </application>

</manifest>

活动\u main.xml

public class MainActivity extends FragmentActivity{

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = (Button) findViewById(R.id.btn_search);    
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {           
                onSearchRequested();    // This will start eveything on button click            
            }
        });
    }
}
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name"
    android:hint="@string/search_hint"
    android:searchSettingsDescription="@string/search_settings"

    android:searchSuggestAuthority="in.wptrafficanalyzer.searchdialogdemo.CountryContentProvider"
    android:searchSuggestIntentAction="android.intent.action.VIEW"
    android:searchSuggestIntentData="content://in.wptrafficanalyzer.searchdialogdemo.CountryContentProvider/countries"
    android:searchSuggestSelection=" ?"
    android:searchSuggestThreshold="1"    

    android:includeInGlobalSearch="true" >
</searchable>
<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"    
    tools:context=".MainActivity" >

    <SearchView
        android:id="@+id/searchView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:iconifiedByDefault="false"
        android:imeOptions="actionSearch" >

    </SearchView>

    <Button
        android:id="@+id/btn_search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/searchView1"
        android:text="@string/search" />

</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="in.wptrafficanalyzer.searchdialogdemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <!--  Activity with SearchDialog enabled -->
        <activity
            android:name="in.wptrafficanalyzer.searchdialogdemo.MainActivity"
            android:label="@string/app_name" >            
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <!-- Enabling Search Dialog -->                      
            <meta-data 
                android:name="android.app.default_searchable"
                android:value=".SearchableActivity" />                        
        </activity>

        <!-- A Searchable activity, that handles the searches -->
        <activity 
            android:name=".SearchableActivity" >            
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>
            <meta-data 
                android:name="android.app.searchable"
                android:resource="@xml/searchable"/>            
        </activity>
        <!--  Activity that shows the country details -->
        <activity android:name=".CountryActivity" />
        <!-- Content Provider to query sqlite database -->
        <provider 
            android:name=".CountryContentProvider"  
            android:authorities="in.wptrafficanalyzer.searchdialogdemo.CountryContentProvider"
            android:exported="true" />        
    </application>

</manifest>

AndroidManifest.xml

public class MainActivity extends FragmentActivity{

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = (Button) findViewById(R.id.btn_search);    
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {           
                onSearchRequested();    // This will start eveything on button click            
            }
        });
    }
}
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name"
    android:hint="@string/search_hint"
    android:searchSettingsDescription="@string/search_settings"

    android:searchSuggestAuthority="in.wptrafficanalyzer.searchdialogdemo.CountryContentProvider"
    android:searchSuggestIntentAction="android.intent.action.VIEW"
    android:searchSuggestIntentData="content://in.wptrafficanalyzer.searchdialogdemo.CountryContentProvider/countries"
    android:searchSuggestSelection=" ?"
    android:searchSuggestThreshold="1"    

    android:includeInGlobalSearch="true" >
</searchable>
<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"    
    tools:context=".MainActivity" >

    <SearchView
        android:id="@+id/searchView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:iconifiedByDefault="false"
        android:imeOptions="actionSearch" >

    </SearchView>

    <Button
        android:id="@+id/btn_search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/searchView1"
        android:text="@string/search" />

</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="in.wptrafficanalyzer.searchdialogdemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <!--  Activity with SearchDialog enabled -->
        <activity
            android:name="in.wptrafficanalyzer.searchdialogdemo.MainActivity"
            android:label="@string/app_name" >            
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <!-- Enabling Search Dialog -->                      
            <meta-data 
                android:name="android.app.default_searchable"
                android:value=".SearchableActivity" />                        
        </activity>

        <!-- A Searchable activity, that handles the searches -->
        <activity 
            android:name=".SearchableActivity" >            
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>
            <meta-data 
                android:name="android.app.searchable"
                android:resource="@xml/searchable"/>            
        </activity>
        <!--  Activity that shows the country details -->
        <activity android:name=".CountryActivity" />
        <!-- Content Provider to query sqlite database -->
        <provider 
            android:name=".CountryContentProvider"  
            android:authorities="in.wptrafficanalyzer.searchdialogdemo.CountryContentProvider"
            android:exported="true" />        
    </application>

</manifest>


请再说一遍,我只是一个新手,如果我的问题有问题,我真的很抱歉,我喜欢编程,我只是想学习。无论如何,非常感谢你!!!任何帮助都将不胜感激

只需参考此链接即可


没什么大不了的。如果您知道CustomListView,那么对您来说很容易。

不理解整个问题,但您可能想忘记
onSearchRequested()
并使用自定义
搜索视图更改它。试试这个

除了在
MainActivity
中,您不需要更改代码中的任何内容。如果你不想搜索