Search code examples
androidlistviewwebviewlocalonclicklistener

ListView Click Action loads all the html documents below the clicked row with last one first?


I have a ListView with one TextView. List view is populated from a string array and array adapter(in the List class extending ListActivity & list_item layout). Now a click listener is set and using switch position statement and local html files from assets folder are linked to the list rows by uri parsing method. When the list row is clicked the html page is set to be displayed in a Webview set up with (TopicDisplay class & display_item layout). Below is my

PROBLEM: When the user clicks a row on the list view - html documents from that row to the last row are displayed with Last document first. I can use the android device back button to navigate through each html document loaded until the clicked row. HOW TO DISPLAY ONLY THE CLICKED ROW HTML DOCUMENT?

Code in List Class

package com.abcdef.list;



//import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
//import android.widget.AdapterView;
//import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
//import android.widget.TextView;

public class List extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // storing string resources into Array
    String[] adobe_products = getResources().getStringArray(R.array.adobe_products);

    // Binding resources Array to ListAdapter
    this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, adobe_products));
}   
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    change(position);
}
void change(int position){
 //   Uri uri = null;
    switch(position){   

case 0 :{
    Intent i0 = new Intent(getApplicationContext(), TopicDisplay.class);
  Uri  uri0=Uri.parse("file:///android_asset/File0.html");
    i0.setData(uri0);
    startActivity(i0);}
case 1 :{
    Intent i1 = new Intent(getApplicationContext(), TopicDisplay.class);
  Uri  uri1=Uri.parse("file:///android_asset/Topic1.html");
    i1.setData(uri1);
    startActivity(i1);}
case 2 :{
    Intent i2 = new Intent(getApplicationContext(), TopicDisplay.class);
    Uri   uri2=Uri.parse("file:///android_asset/Topic2.html");
    i2.setData(uri2);
    startActivity(i2);}

case 3:{
    Intent i3 = new Intent(getApplicationContext(), TopicDisplay.class);
    Uri  uri3=Uri.parse("file:///android_asset/Topic3.html");
    i3.setData(uri3);
    startActivity(i3);}
  case 4:{
      Intent i4 = new Intent(getApplicationContext(), TopicDisplay.class);
      Uri    uri4=Uri.parse("file:///android_asset/Topic4.html");
    i4.setData(uri4);
    startActivity(i4);}
 case 5:{
     Intent i5 = new Intent(getApplicationContext(), TopicDisplay.class);
     Uri  uri5=Uri.parse("file:///android_asset/Topic5.html");
    i5.setData(uri5);
    startActivity(i5);}
 case 6:{
     Intent i6 = new Intent(getApplicationContext(), TopicDisplay.class);
     Uri  uri6=Uri.parse("file:///android_asset/Topic6.html");
     i6.setData(uri6);
     startActivity(i6);}
  case 7:{
      Intent i7 = new Intent(getApplicationContext(), TopicDisplay.class);
      Uri  uri7=Uri.parse("file:///android_asset/Topic7.html");
     i7.setData(uri7);
     startActivity(i7);}
  case 8:{
      Intent i8 = new Intent(getApplicationContext(), TopicDisplay.class);
      Uri  uri8=Uri.parse("file:///android_asset/Topic8.html");
     i8.setData(uri8);
     startActivity(i8);}  
   } } }

Here is my TopicDisplay class code

package com.abcdef.list;

import android.app.Activity;
//import android.app.Application;
//import android.content.Intent;
import android.os.Bundle;
import android.webkit.*;

public class TopicDisplay extends Activity{



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.topic_display);


    WebView tabViewing = (WebView) findViewById(R.id.webView1);
    tabViewing.loadUrl(getIntent().getDataString());

}
}

Solution

  • When the user clicks a row on the list view - html documents from that row to the last row are displayed with Last document first.

    You simply forgot to add break; to each case in your switch statement.

    You should also remove the common code from each case statement, try:

    Intent intent = new Intent(getApplicationContext(), TopicDisplay.class);
    switch(position){   
    case 0 :
        intent.setData(Uri.parse("file:///android_asset/File0.html"));
        break;
    case 1 :
        intent.setData(Uri.parse("file:///android_asset/Topic1.html"));
        break;
    case 2 :
        intent.setData(Uri.parse("file:///android_asset/Topic2.html"));
        break;
    // etc
    }
    startActivity(intent);