2016-11-16 9 views
0

ListViewに複数の項目が含まれていて、一覧内の各項目にボタンを含むWebviewを開いて別のURLを開くと、正しいURLがロードされません。カスタムアダプターを使用してURLと説明を設定しました。 URLと同じ説明を設定し、説明のURLは正確ですが、webviewは別のウェブサイトを読み込み、アクティビティを開始するたびに別のURLを読み込むように見えます。WebViewがListViewボタンから正しいURLをロードしていません

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; 
} 
} 
ここ
@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 MainActivity.java

です

答えて

1

deity = data[position];deities deity = data[position]; に置き換えてください。今のようなコードでは、あなたのURLは常に最後に表示されたアイテムのURLです。

もう1つ、このコードはWebViewでアクティビティにある必要があります。アクティビティ全体をアダプタに渡さないでください。アダプタがアクティビティと通信するインターフェイスを作成し、アクティビティで実装し、アダプタのそのインターフェイスとしてアクティビティを渡します。 onClickより、インタフェース内の1つのメソッドを呼び出すだけで、Activity内のWebViewに関するすべての作業を行います。

+0

これが機能し、さらにヘルプが必要ない場合は、私の答えを受け入れてください。 –

関連する問題