2016-11-16 41 views
0

所以我想要一個列表視圖與一堆項目,列表中的每個項目包含一個按鈕,打開一個webview打開一個不同的URL,但它不會加載正確的URL 。使用自定義適配器我設置了URL和描述。我將描述設置爲與URL相同,並且描述的網址準確無誤,但是網頁視圖加載了不同的網站,並且看起來並不一致,似乎每次啓動活動時都會加載不同的網址。WebView沒有從ListView按鈕加載正確的URL

這裏的MainActivity.java

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    deities deity_data[] = new deities[] 
      { 
        new deities(R.drawable.transparent, "Test 1", "http://google.com", 1, Color.parseColor("#ff3399")), 
        new deities(R.drawable.transparent, "Test 2", "http://facebook.com", 1, Color.parseColor("#9933ff")), 
        new deities(R.drawable.transparent, "Test 3", "http://youtube.com", 1, Color.parseColor("#0099ff")), 
        new deities(R.drawable.transparent, "Test 4", "http://pinterest.com", 1, Color.parseColor("#009900")), 
        new deities(R.drawable.transparent, "Test 5", "http://twitter.com", 1, Color.parseColor("#cc0000")), 
        new deities(R.drawable.transparent, "Test 6", "http://facepunch.com", 1, Color.parseColor("#0000cc")), 
        new deities(R.drawable.transparent, "Test 7", "http://ifttt.com", 1, Color.parseColor("#333300")) 

      }; 
    deityListAdapter adapter = new deityListAdapter(this, 
      R.layout.deity_list_item, deity_data); 

    ListView deityList = (ListView)findViewById(R.id.deityList); 
    deityList.setAdapter(adapter); 



} 

dietyListAdapter.java:

public class deityListAdapter extends ArrayAdapter<deities> { 

Context context; 
int layoutResourceId; 
deities data[] = null; 
deities deity; 

public deityListAdapter(Context context, int layoutResourceId, deities data[]) { 
    super(context, layoutResourceId, data); 
    this.layoutResourceId = layoutResourceId; 
    this.context = context; 
    this.data = data; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent){ 
    View ListItem = convertView; 
    Holder holder; 

    if (ListItem == null) { 

     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     ListItem = inflater.inflate(layoutResourceId, parent, false); 

     holder = new Holder(); 
     holder.description = (TextView)ListItem.findViewById(R.id.deityDesc); 
     holder.banner = (ImageView)ListItem.findViewById(R.id.deityBanner); 
     holder.website = (Button)ListItem.findViewById(R.id.deityWebsite); 
     ListItem.setTag(holder); 

    } else { 
     holder = (Holder) ListItem.getTag(); 
    } 
    deity = data[position]; 
    View.OnClickListener holderListener = new View.OnClickListener() { 
     public void onClick(View v) { 
      WebView webView = (WebView)((Activity) context).findViewById(R.id.webView); 

      webView.setWebChromeClient(new WebChromeClient() { 
       public void onProgressChanged(WebView view, int progress) { 
        ProgressBar webViewProgressBar = (ProgressBar) ((Activity) context).findViewById(R.id.webViewProgress); 
        webViewProgressBar.setVisibility(View.VISIBLE); 
        webViewProgressBar.setProgress(progress); 

        if (progress == 100) { 
         webViewProgressBar.setVisibility(View.GONE); 
        } 

       } 
      }); 
      webView.setWebViewClient(new WebViewClient() { 
       @Override 
       public boolean shouldOverrideUrlLoading(WebView view, String url) 
       { 
        return false; 
       } 
       @Override 
       public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) 
       { 
        return false; 
       } 
      }); 
      webView.getSettings().setJavaScriptEnabled(true); 
      webView.setVisibility(View.VISIBLE); 
      webView.loadUrl(deity.url); 





     } 
    }; 


    holder.website.setOnClickListener(holderListener); 
    holder.banner.setImageResource(deity.banner); 
    holder.description.setText(deity.description); 
    holder.banner.setBackgroundColor(deity.color); 
    holder.description.setText(deity.url); 
    return ListItem; 

} 
static class Holder { 

    TextView description; 
    ImageView banner; 
    Button website; 



} 

dieties.java:

public class deities { 

public int banner; 
public String description; 
public String url; 
public int color; 
public int id; 
public deities(){ 
    super(); 
} 

public deities(int banner, String description, String url, int id, int color){ 
    super(); 
    this.banner = banner; 
    this.description = description; 
    this.url = url; 
    this.color = color; 
    this.id = id; 
} 
} 

回答

1

deity = data[position];替換爲deities deity = data[position]; 使用現在的代碼,您的網址始終是最後呈現內容的網址。

還有一件事,這個帶有WebView的代碼應該在Activity中。不要將整個活動傳遞給適配器。通過哪個適配器與Activity進行通信創建接口,在Activity中實現它,並將Adapter作爲接口傳遞給Activity。與onClick相比,只需在界面中調用一個方法,並在Activity中完成關於WebView的所有工作。

+0

如果它有效,你不需要更多的幫助,請接受我的答案。 –