views:

448

answers:

1

I've been figuring how to popup a webview all day when a row in my ListActivity is clicked. I can't even show a Toast when it's clicked. Need help

I'm still new with Android, a web developer trying to learn. Thanks before.

package com.mf.ar;

import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;

import android.app.Activity; import android.app.AlertDialog; import android.app.ListActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.Window; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ArrayAdapter; import android.widget.Toast;

public class ListViewer extends ListActivity { private String mJSON; private String[] listRows; private String[] listRowsURI;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     //setContentView(R.layout.listview);

     Bundle the = getIntent().getExtras();
     this.mJSON = the.getString("JSON");
     Log.i("ListViewIntentJSON", this.mJSON);

     try {
JSONObject UrbJSON = new JSONObject(mJSON);

JSONObject UrbQuery = UrbJSON.getJSONObject("query");
int rows = UrbQuery.getInt("row");
Log.i("UrbRows", String.format("%d",rows));

JSONArray resultArray = UrbJSON.getJSONArray("result");

this.listRows = new String[rows];
for(int i=0; i<rows; i++) { 
 this.listRows[i] = resultArray.getJSONObject(i).
   getString("business_name").toString();
}
this.listRowsURI = new String[rows];
for(int i=0; i<rows; i++) { 
 this.listRowsURI[i] = resultArray.getJSONObject(i).
   getString("business_uri_mobile").toString();
}
     } catch(JSONException e) {
      e.printStackTrace();
     }

     this.setListAdapter(new ArrayAdapter<String>(this, 
             android.R.layout.simple_list_item_1, ListViewer.this.listRows));
 }

 @Override
 protected void onListItemClick(android.widget.ListView l, View v, int position, long id) {
  super.onListItemClick(l, v, position, id);

  String theURI = ListViewer.this.listRowsURI[position].toString();
  /*String theURI = ListViewer.this.listRowsURI[position].toString();
  //String theURI = "http://www.mediafusion.web.id";

  WebView webview = new WebView(this);
  //setContentView(webview);
  //addContentView(webview, null);
  webview.getSettings().setJavaScriptEnabled(true);
  getWindow().requestFeature(Window.FEATURE_PROGRESS);
  final Activity activity = this;
webview.setWebChromeClient(new WebChromeClient() {
  public void onProgressChanged(WebView view, int progress) {
    // Activities and WebViews measure progress with different scales.
    // The progress meter will automatically disappear when we reach 100%
    activity.setProgress(progress * 1000);
  }
});
webview.setWebViewClient(new WebViewClient() {
  public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
    Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
  }
});
  webview.loadUrl(theURI);*/

  Toast.makeText(ListViewer.this.getApplicationContext(), theURI, Toast.LENGTH_SHORT);

 }

}

A: 

Delete all occurrences of getApplicationContext() in your code, and things will work better for you. ListViewer is a Context -- just use it in your Toast.

With respect to the WebView, I think you will be better served making that its own activity and starting that activity from onListItemClick().

CommonsWare
I've removed getApplicationContext() and instead used ListViewer.this but still the Toast won't show :(Anyhow, I'm following your advice to make the webview its own activity. Will post more later :)
Tista
I've done what you told, it worked like a charm. Thank you for the pointers!
Tista