让搜索活动返回结果?

问题描述:

嗨,我想知道如何让我的搜索活动返回结果回到启动它的活动。让搜索活动返回结果?

我目前实现了一个搜索对话框(意思是一旦点击了手机上的搜索按钮,搜索活动就会启动)。

这是我的代码为搜索活动这是一个列表视图。

公共类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的结果之一,因为它使用一些数据将数据返回到主要活动,例如点击搜索结果的名称。

谢谢。

你想要做的是使用startActivityForResult启动搜索。请参阅说明here

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

+0

将这项工作的搜寻活动呢? – Overload119

+0

实施此方法后,问题在于,即使在将任何输入放入框中之前,也会调用onSearchRequested。因此,搜索工作和结果由我的搜索查询返回始终默认为“空” – Overload119

在您的setOnItemClickListener方法中会出现这种情况,您可以在其中启动一个明确的意图,用额外的数据命名所需的活动。

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

+0

开始一个新的活动的问题是,我想给数据的以前的活动。我不想开始一个新的。 – Overload119

我落得这样做:

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) {