2017-08-20 2 views
0

J'ai créé une application webview avec listview fragmenté. J'ai suivi ce lien: Opening multiple local html files using webView via ListView Lorsque je clique sur l'élément, il doit me rediriger vers les détails de l'élément de webview. Maintenant j'essaye de l'implémenter dans le fragment Mais un seul article est réussi tandis que les autres articles ne me pointent pas au détail de webview qui devrait être. Je cherchais une solution mais toujours pas de chance. Voici mon codePlusieurs fichiers html fragmentés en utilisant webView via ListView

MainActivity:

package com.listviewfragment.withsublist; 

import android.support.v4.app.FragmentTransaction; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Main_listFragment main_listFragment = new Main_listFragment(); 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.content, main_listFragment); 
     fragmentTransaction.commit(); 
    } 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.listviewfragment.withsublist.MainActivity"> 

<FrameLayout 
android:id="@+id/content" 
android:layout_width="match_parent" 
android:layout_height="match_parent"></FrameLayout> 

</android.support.constraint.ConstraintLayout> 

Main_listFragment.java

package com.listviewfragment.withsublist; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class Main_listFragment extends Fragment { 
ListView listView; 


public Main_listFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_main_list, container, false); 
    // Inflate the layout for this fragment 
    listView = (ListView) rootView.findViewById(R.id.list); 
    String[] values = new String[] { 
      "Detail Webview 1", 
      "Detail Webview 2", 
      "Detail Webview 3", 
    }; 

    ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, values); 

    // Assign adapter to ListView 
    listView.setAdapter(adapter); 

    // ListView Item Click Listener 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      // TODO Auto-generated method stub 

      // ListView Clicked item value 
      listView.getItemAtPosition(position); 
      if (position == 0) { 
       Detail_webview_mainFragment dlm = new Detail_webview_mainFragment(); 
       getFragmentManager().beginTransaction().replace(R.id.content, dlm).addToBackStack(null).commit(); 
      } 
      else if (position == 1) { 
       Detail_webview_mainFragment dlm = new Detail_webview_mainFragment(); 
       getFragmentManager().beginTransaction().replace(R.id.content, dlm).addToBackStack(null).commit(); 
      } 
      else if (position == 2) { 
       Detail_webview_mainFragment dlm = new Detail_webview_mainFragment();; 
       getFragmentManager().beginTransaction().replace(R.id.content, dlm).addToBackStack(null).commit(); 
      } 
     } 

    }); 
    return rootView; 
} 

} 

fragment_main_list.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.listviewfragment.withsublist.Main_listFragment"> 


    <ListView 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    </ListView> 

</FrameLayout> 

Detail_webview_mainFragment.java

package com.listviewfragment.withsublist; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class Detail_webview_mainFragment extends Fragment { 
WebView view; 

public Detail_webview_mainFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    //getArguments().getString("key"); 
    // Inflate the layout for this fragment 
    View rootView = inflater.inflate(R.layout.fragment_detail_webview_main, container, false); 

    view = (WebView) rootView.findViewById(R.id.webview); 
    // Enable Javascript 
    WebSettings webSettings = view.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    view.setWebViewClient(new WebViewClient()); 

    int pos = getActivity().getIntent().getIntExtra("key", 0); 
    if (pos == 0) { 
     view.loadUrl("file:///android_asset/html/webview1.html"); 
    } else if (pos == 1) { 
     view.loadUrl("file:///android_asset/html/webview2.html"); 
    } else if (pos == 2) { 
     view.loadUrl("file:///android_asset/html/webview3.html"); 
    } 
    return rootView; 

    } 
} 

fragment_detail_webview_main

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.listviewfragment.withsublist.Detail_webview_mainFragment"> 

<!-- TODO: Update blank fragment layout --> 
<WebView 
android:id="@+id/webview" 
android:layout_width="match_parent" 
android:layout_height="match_parent"></WebView> 

</FrameLayout> 
+0

Pourquoi voulez-vous utiliser au lieu fragment d'activité? En utilisant Detail_webview_mainFragment pour remplacer votre mise en page MainActivity, cela signifie que le Fragment de liste disparaîtra également. – Inducesmile

Répondre

0

Vous utilisez fragment même détail pour toutes les positions 0,1,2. Il suffit de faire comme ceci:

Detail_webview_mainFragment dlm = new Detail_webview_mainFragment(); 
Bundle args = new Bundle(); 
args.putInt("key", pos); 
dlm.setArguments(args); 

et au lieu de

int pos = getActivity().getIntent().getIntExtra("key", 0); 

dans le fragment de détail faire:

int pos=0; 
if (getArguments() != null) {  
pos= getArguments().getInt("key");    
}