【问题标题】:Have a Search Activity return a result?搜索活动是否返回结果?
【发布时间】:2011-08-24 14:10:19
【问题描述】:

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

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

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

公共类 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 中的一个结果时,它会用一些数据将数据返回到主要活动,说出点击搜索的名称结果。

谢谢。

【问题讨论】:

    标签: android search listactivity


    【解决方案1】:

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

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

    【讨论】:

    • 在实现这种方法之后,问题在于 onSearchRequested 甚至在任何输入被放入框之前就被调用了。因此搜索有效,我的搜索查询返回的结果始终默认为“Null”
    【解决方案2】:

    这将发生在您的 setOnItemClickListener 方法中,您可以在其中启动一个显式意图,使用额外数据命名所需的活动。

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

    【讨论】:

    • 开始一个新活动的问题是我想给数据提供以前的活动。我不想开始一个新的。
    【解决方案3】:

    我最终这样做了:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多