2015-08-09 47 views
0

我的應用程序有一個主要的片段,其中有一個web視圖,webview服務於不同的本地html文件,用戶從其他片段listview中選擇。我已經在列表視圖上實現了onclick監聽器,但是當我嘗試使用文件填充webview時,應用程序崩潰。訪問MainFragments webview在另一個片段

這裏檢查我的代碼

package as.hif.smartlearnvtu; 

import android.app.Activity; 
import android.net.Uri; 
import android.os.Bundle; 
import android.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.webkit.WebView; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 


public class NetLabFragment extends Fragment { 
public static final String TAG = "netlab"; 
String[] netprograms ={ 
     "01 Simulation of three Nodes P2P Network", 
     "02 Simulation of four Nodes P2P Network", 
     "03 Simulation of Transmission of Ping Messages", 
     "04 Simulation of Ethernet LAN-I", 
     "05 Simulation of Ethernet LAN-II", 
     "06 Simulation of Simple ESS", 
     "07 Error Detection with CRC-CCITT", 
     "08 Distance Vector Algorithm in C/C++", 
     "09 Client/Server Using TCP/IP", 
     "10 Messages Using FIFO's IPC", 
     "11 Simple RSA Algorithm in C/C++", 
     "12 Leaky Bucket Algorithm in C/C++" 
}; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_net_lab, container, false); 


} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    final WebView myWebView = (WebView) getView().findViewById(R.id.webView); 
    ListView listView = (ListView) getActivity().findViewById(R.id.listView3); 
    listView.setAdapter(new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, netprograms)); 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Fragment fragment; 
      switch (position) { 
       case 0: 
       case 1: 
       case 2: 
       case 3: 
       case 4: 
       case 5: 
       case 6: 
       case 7: 
       case 8: myWebView.loadUrl("file:///android_asset/dks.html"); 
       case 9: 
       case 10: 
       case 11: 
       case 12: 

      } 

     } 

    }); 

} 

} 

回答

0

你爲什麼不從NetLabFragment通過選定的URL父活動,進而調用你的MainFragment的方法在其webview顯示,而不是訪問MainFragment's的WebView直接在NetLabFragment。檢查此鏈接出去的更多信息:

http://developer.android.com/training/basics/fragments/communicating.html

+0

非常感謝,對於回覆 – user1474752

+0

爲什麼我不能訪問netlab fragment..since主要片段的Web視圖兩個片段屬於同一acitivty? – user1474752

0

從提供的信息,我可以告訴你的應用程序崩潰,因爲你企圖找到Web視圖中不存在在你的NetLabFragment。什麼ü真正需要要做的是傳遞網址(用戶點擊)到MainActivity並從那裏到網頁瀏覽存在的MainFragment

所以首先將OnUrlSelectedListener加到你的NetLabFragment並得到它的實例OnAttach的片段。

NetLabFragment:

OnUrlSelectedListener mCallback; 

... 

public interface OnUrlSelectedListener { 
     public void OnUrlSelected(String url); 
    } 

... 

@Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      mCallback = (OnUrlSelectedListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement OnUrlSelectedListener"); 
     } 
    } 

所以現在妳願意通過你的活動兩個碎片之間的通信。

MainActivity:

public class MainActivity extends Activity 
     implements NetLabFragment.OnUrlSelectedListener{ 

.... 

public void onUrlSelected(String url) { 
     // The user selected the Url from the NetLabFragment 
     //get instance of Mainfragment by using id and call its method LoadUrl to load the url 

     MainFragment mainFrag = (MainFragment) 
       getSupportFragmentManager().findFragmentById(R.id.main_fragment); 

     mainFrag.LoadUrl(url); 

    } 

} 

將URL傳遞到OnUrlSelected方法在OnItemClick在NetLabfragment

NetLabfragment:

.... 

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

//get the url from the position parameter 

mCallback.onUrlSelected(url); 
+0

如果是這樣的話,爲什麼不給我一個語法錯誤,而使用findview編號 – user1474752

+0

因爲它在語法上是正確的.Id只是一個靜態隨機生成的整數,你可以在R.java中找到 – Tejas