Поисковая активность возвращает результат? - PullRequest
2 голосов
/ 24 августа 2011

Привет, мне было интересно, как заставить поисковое действие вернуть результат обратно в начавшее его действие.

В настоящее время у меня реализовано диалоговое окно поиска (что означает, что операция поиска начинается после нажатия кнопки поиска на телефоне).

Вот мой код для операции поиска, которая представляет собой представление списка.

открытый класс ItemFinder extends 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 ]

1 голос
/ 24 августа 2011

Это произошло бы в вашем методе setOnItemClickListener, где вы могли бы запустить явное намерение, назвав желаемое действие дополнительными данными.

Редактировать: Я не совсем уверен, какstartActivityForResult() будет реализовано, поскольку мы говорим о поисковой активности приложения, то есть оно запускается специальным поисковым модулем Android;Вот почему я предложил вышеуказанное решение.

1 голос
/ 24 августа 2011

Я закончил тем, что сделал:

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) {
1 голос
/ 24 августа 2011

Что вы хотите сделать, это запустить поиск, используя startActivityForResult.См. Объяснение здесь .

Таким образом, вы можете передать результаты поиска обратно в действие, которое его запустило.

...