2012-06-27 12 views
0

搜索api將一些元數據和URL「eventURL」一起返回給我。我將數據放在列表視圖中,每行都包含一些數據和一個唯一的URL。我希望當用戶點擊列表視圖中的行時,該唯一的URL應該在webview中打開。我爲它創建了一個WebViewActivity,我在實現onClickListener時遇到了問題。用於從列表視圖行啓動webview的OnClickListener

MainActivity

public class MainActivity extends Activity { 

//private EditText m_search_text; 
private EditText m_zip; 
private ListView m_search_results; 
private Button m_search_btn; 
private JSONArray m_results; 
private LayoutInflater m_inflater; 
private InputMethodManager m_ctrl; 
private Spinner m_radius; 
private Spinner m_activity_selector; 
public static int radius = 0; 
public static String activities; 



static final private int EXIT_ID = Menu.FIRST; 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 
    // m_search_text = (EditText) findViewById(R.id.search_text); 
    m_zip = (EditText) findViewById(R.id.zip); 
    m_search_btn = (Button) findViewById(R.id.search_button); 
    // m_search_results = (ListView) findViewById(R.id.lview); 
    m_search_btn .setOnClickListener(go_handler); 

    m_ctrl = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    m_inflater = LayoutInflater.from(this); 
    addListenerOnSpinnerItemSelection(); 
    addListenerOnSpinner1ItemSelection(); 

    m_search_results = (ListView)findViewById(R.id.lview); 

} 

public void addListenerOnSpinnerItemSelection() { 
    m_radius = (Spinner) findViewById(R.id.spinner); 
    m_radius.setOnItemSelectedListener(new CustomOnItemSelectedListener()); 
    } 

public void addListenerOnSpinner1ItemSelection(){ 
    m_activity_selector = (Spinner) findViewById(R.id.spinner1); 
    m_activity_selector.setOnItemSelectedListener(new ActivitySelectedListener()); 
    } 

@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    super.onCreateOptionsMenu(menu); 

    menu.add(0, EXIT_ID, 0, R.string.exit); 
    return true; 
    } 
@Override 
public boolean onOptionsItemSelected (MenuItem item){ 

    switch (item.getItemId()){ 
    case EXIT_ID: 
     finish(); 
     return true; 

    } 

    return super.onOptionsItemSelected(item); 

} 



OnClickListener go_handler = new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     m_ctrl.hideSoftInputFromWindow(m_zip.getWindowToken(), 0); 

     //String searchText = Uri.encode(m_search_text.getText().toString()); 
     String zip = Uri.encode(m_zip.getText().toString()); 

     new SearchTask().execute("?k=Fall+Classic" + "&m=meta:channel=" + activities + "&l="+ zip + "&r=" + radius); 
     // Show a toast showing the search text 
     Toast.makeText(getApplicationContext(), 
       getString(R.string.search_msg) + " " + 
       activities, Toast.LENGTH_LONG).show(); 
    } 
}; 

private class SearchTask extends AsyncTask<String, Integer, String> 
{ 

    ProgressDialog dialog; 

     @Override 
     protected void onPreExecute() { 

      dialog = ProgressDialog.show(MainActivity.this,"","Please Wait..."); 

      super.onPreExecute(); 
     } 

     @Override 
     protected String doInBackground(String... params) { 
      try { 
       String result = ActiveHelper.download(params [0]); 
       return result; 
      } catch (ApiException e) { 
       e.printStackTrace(); 
       Log.e("alatta", "Problem making search request"); 
      } 
      return ""; 
     } 
     @Override 
     protected void onPostExecute(String result) { 
      dialog.hide(); 
      try { 
       JSONObject obj = new JSONObject(result); 
       m_results = obj.getJSONArray("_results"); 
       if (m_results == null ||m_results.length() == 0) 
       { 
        Toast.makeText(getApplicationContext(), 
          "No Results found for " + activities, 
          Toast.LENGTH_LONG).show(); 

       } 
       else 
        m_search_results.setAdapter(new JSONAdapter(getApplicationContext())); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

private class JSONAdapter extends BaseAdapter 
{ 
    public JSONAdapter(Context c){ 

    } 

    public int getCount() 
    { 
    return m_results.length(); 
     } 

    public Object getItem(int arg0){ 
     return null; 
    } 

    public long getItemId(int pos){ 
     return pos; 

    } 

    public View getView(int pos, View convertView, ViewGroup parent) { 
     View tv; 
     TextView t; 

     if (convertView == null) 
      tv = m_inflater.inflate (R.layout.item, parent, false); 
     else 
      tv = convertView; 
     try { 
      /* For each entry in the ListView, we need to populate 
      * its text and timestamp */ 
      t = (TextView) tv.findViewById(R.id.text); 
      JSONObject obj = m_results.getJSONObject(pos); 

      t.setText (obj.getString("title").replaceAll("\\<.*?\\>", "")); 

      t = (TextView) tv.findViewById(R.id.created_at); 
      JSONObject meta = obj.getJSONObject("meta"); 
      t.setText ("When:" + "\t"+meta.getString("startDate")+"\n"+"Location:" +"\t" +meta.getString("location")+"\n" +"More Info:"+"\t" +meta.getString("eventURL")+"\n"); 


     } catch (JSONException e) { 

      Log.e("alatta", e.getMessage()); 
     } 
     return tv; 
    } 
}} 

WebViewActivity

公共類WebViewActivity擴展MainActivity {

private WebView webView; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.webview); 

     webView = (WebView) findViewById(R.id.webView); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.loadUrl("url"); 

    }} 

感謝。

回答

1

您需要使用OnItemClickListener:

MainActivity implements OnItemClickListener { 

onCreate() { 
m_search_results.setOnItemClickListener(this); 

使用此法:

onItemClick(AdapterView<?> parent, View view, int position, long id) { 

url = JSON.getHowever(position); 

//get the intent, load the url, and launch the activity 

} 

您還需要處理這個意圖在WebViewActivity,不過這與本題無關

+0

感謝快速響應。 –

+0

讓我知道它是否有效! –

相關問題