让搜索活动返回结果吗?

时间:2011-08-24 14:10:19

标签: android search listactivity

您好,我想知道如何让我的搜索活动将结果返回给启动它的活动。

我目前已实施搜索对话框(意味着点击手机上的搜索按钮后,搜索活动就会启动)。

以下是我的搜索活动代码,它是一个列表视图。

公共类ItemFinder扩展了ListActivity {

public static final int REQUEST_CODE = 1; // get it?
Vector<String> upcCodes;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.search);

    upcCodes = new Vector<String>();

    ListView lv = (ListView) findViewById(android.R.id.list);
    lv.setOnItemClickListener(new OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position,
                long id) {              
            String upc = upcCodes.elementAt(position);

            setResult(RESULT_OK);
        }
    });

    // Get the intent, verify the action and get the query
    Intent intent = getIntent();
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
      String query = intent.getStringExtra(SearchManager.QUERY);

      ProgressDialog dialog = ProgressDialog.show(ItemFinder.this, "Searching", 
              "Searching. Please wait...", true);

      performSearch(query);

      dialog.hide();
      dialog.dismiss();
    }
}

public void performSearch(String query){    
    String result = new SmartShopClient().SearchItems(query);
    List<String> dataList = new ArrayList<String>();

    String _parsedResult[] = result.split("\\n");
    for( int i = 0; i<_parsedResult.length; i++){
        String _splitData[] = _parsedResult[i].split("\\|");
        String itemName = _splitData[0];
        String itemUPC = _splitData[1];
        dataList.add(itemName);
        upcCodes.add(itemUPC);
    }              

    ArrayAdapter<String> arr = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dataList);
    this.setListAdapter(arr);

}

}

所以搜索工作一切都很好,但是当我点击ListView中的一个结果时我想要它,因为它将数据返回到包含一些数据的主活动,比如点击搜索的名称结果

感谢。

3 个答案:

答案 0 :(得分:1)

您要做的是使用startActivityForResult启动搜索。请参阅解释here

这样,您就可以将搜索结果传回给启动它的活动。

答案 1 :(得分:1)

这会发生在您的setOnItemClickListener方法中,您可以在其中启动明确的意图,用额外的数据命名所需的活动。

编辑:我不太确定startActivityForResult()将如何实施,因为我们正在谈论应用程序的搜索活动,这意味着它是由Android搜索特定模块启动的;这就是我提出上述解决方案的原因。

答案 2 :(得分:1)

我最终这样做了:

public boolean onSearchRequested() {
    askSearchQuery();
    return true;
}

public void sendSearchRequest(String query){
    Intent mIntent = new Intent(this, ItemFinder.class);
    mIntent.setAction(Intent.ACTION_SEARCH);
    mIntent.putExtra(SearchManager.QUERY, query);
    startActivityForResult(mIntent, ItemFinder.REQUEST_CODE);
}

public void askSearchQuery() {
    final EditText input = new EditText(SmartShop.this);
    AlertDialog.Builder adb = new AlertDialog.Builder(SmartShop.this);
    adb.setTitle("Search Items");
    adb.setMessage("Please input the name of the item you are looking for.");
    adb.setView(input);
    adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {          

            Editable upc = input.getText(); 
            sendSearchRequest(upc.toString());

            dialog.cancel();
        }
    });
    adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            dialog.cancel();
        }
    });
    adb.create().show();
}

然后我迷上了

protected void onActivityResult (int requestCode, int resultCode, Intent data) {