2011-08-24 2 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가 호출된다는 문제가 있습니다. 따라서 검색이 작동하고 결과가 내 검색 쿼리에 의해 반환됩니다. 항상 기본값은 "Null"입니다. – Overload119

1

setOnItemClickListener 방법에서 추가 데이터로 원하는 활동의 이름을 명시 할 수 있습니다.

편집 : 나는 startActivityForResult()이 구현 될 것입니다 방법을 아주 확실하지 않다 우리가 안드로이드 검색 특정 모듈에 의해 시작있어 의미 응용 프로그램의 검색 활동에 대해 얘기하고 이후; 그래서 위의 해결책을 제안했습니다.

+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) { 
관련 문제