2011-08-24 101 views
1

嗨,我想知道如何讓我的搜索活動返回結果回到啓動它的活動。讓搜索活動返回結果?

我目前實現了一個搜索對話框(意思是一旦點擊了手機上的搜索按鈕,搜索活動就會啓動)。

這是我的代碼爲搜索活動這是一個列表視圖。

公共類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的結果之一,因爲它使用一些數據將數據返回到主要活動,例如點擊搜索結果的名稱。

謝謝。

回答

1

你想要做的是使用startActivityForResult啓動搜索。請參閱說明here

這樣,您可以將搜索結果傳回給啓動它的活動。

+0

將這項工作的搜尋活動呢? – Overload119

+0

實施此方法後,問題在於,即使在將任何輸入放入框中之前,也會調用onSearchRequested。因此,搜索工作和結果由我的搜索查詢返回始終默認爲「空」 – Overload119

1

在您的setOnItemClickListener方法中會出現這種情況,您可以在其中啓動一個明確的意圖,用額外的數據命名所需的活動。

編輯:我不是很確定的startActivityForResult()將如何實現,因爲我們正在談論的應用程序的搜索活動,這意味着它是由Android的搜索特定模塊的推出;這就是爲什麼我建議上述解決方案。

+0

開始一個新的活動的問題是,我想給數據的以前的活動。我不想開始一個新的。 – Overload119

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