2017-01-23 8 views
1

HTMLから画像を表示したい場合は、Jsoupを使用して画像URLソースを取得します。しかし、問題は、各投稿が異なる数の画像を有することである。 したがって、xmlレイアウトでImageViewの数を修正できません。調査した後、私はImageViewを動的に作成できることを知っています。そこで、私はImageViewsを作成し、Linearlayoutに挿入します。しかし、最後に挿入した画像は1つしか見ることができません。Androidで画像ビューを動的に追加する

package kr.ac.mju.hanmaeum.activity.notice; 

import android.content.Intent; 
import android.media.Image; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.text.Html; 
import android.util.Log; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

import com.bumptech.glide.Glide; 

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import kr.ac.mju.hanmaeum.R; 
import kr.ac.mju.hanmaeum.activity.BaseActivity; 
import kr.ac.mju.hanmaeum.utils.Constants; 


public class NoticeContent extends BaseActivity { 
    private String url, title, timestamp, content = ""; 
    private TextView timestampView, titleView; 
    private ImageView contentImageView, contentImageView2; 
    private GetImageContentTask getImageContentTask; 
    private ArrayList<String> imgList; 
    private LinearLayout linearLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_notice_content); 

     // get intent from MainActivity. 
     Intent intent = getIntent(); 
     url = intent.getStringExtra("URL"); 
     title = intent.getStringExtra("TITLE"); 
     timestamp = intent.getStringExtra("TIMESTAMP"); 

     // Set layout contents and I will change this using ButterKnife and detach them to initFunction. 
     timestampView = (TextView) findViewById(R.id.contentTimestamp); 
     titleView = (TextView) findViewById(R.id.contentTitle); 
     contentImageView = (ImageView) findViewById(R.id.contentImage); 
     contentImageView2 = (ImageView) findViewById(R.id.contentImage2); 

     linearLayout = (LinearLayout) findViewById(R.id.content_Linear); 
     imgList = new ArrayList<String>(); 

     // get title and timestamp from MainActivity. 
     titleView.setText(Constants.NOTICE_TITLE + title); 
     timestampView.setText(Constants.NOTICE_TIMESTAMP + timestamp); 

     getImageContentTask = new GetImageContentTask(); 
     getImageContentTask.execute(); 
    } 

    class GetImageContentTask extends AsyncTask<Void, Void, ArrayList<String>> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected ArrayList<String> doInBackground(Void... params) { 
      try { 
       Document doc = Jsoup.connect(url).timeout(0).get(); 

       Elements imgs = doc.select("#divView > img"); 
       for(Element img : imgs) { 
        imgList.add(img.attr("src")); 
       } 
      } catch(IOException e) { 
       e.printStackTrace(); 
      } 
      return imgList; 
     } 

     @Override 
     protected void onPostExecute(ArrayList<String> imgList) { 
      super.onPostExecute(imgList); 

      for(int i=0; i< imgList.size(); i++) { 
       ImageView imgView = new ImageView(NoticeContent.this); 
       Glide.with(NoticeContent.this).load(imgList.get(i)).override(200,200).into(imgView); 
       linearLayout.addView(imgView); 
      } 
     } 
    } 
} 

答えて

1

あなたはこのように、あなたのImageViewsにLayoutParamsを追加必要があります。

 for(int i=0; i< imgList.size(); i++) { 
      ImageView imgView = new ImageView(NoticeContent.this); 
      LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(200, 200); 
      imgView.setLayoutParams(lp); 
      Glide.with(NoticeContent.this) 
       .load(imgList.get(i)) 
       .override(200,200) 
       .into(imgView); 
      linearLayout.addView(imgView); 
     } 
+0

ありがとうございました!!!!できます !!!!!!!!私はアンドロイドの新しい...だから、私はそれを知りませんでした..!ありがとうございました~~~~~~~大いに!!!!!!!!!!! –

+0

それは私の喜びです。 – Krbit

0

この

for(int i=0; i< imgList.size(); i++) { 
     ImageView imgView = new ImageView(this); 
     imgView.setId(i++); 
     Glide.with(this).load(imgList.get(i)).override(200,200).into((ImageView)findViewById(i++)) 
     linearLayout.addView(imgView); 
    } 

または

for (UserListData userListData : userListDatas){ 
     Glide.with(getActivity()) 
       .load(userListData.getAvatar()) 
       .asBitmap() 
       .fitCenter() 
       .into(new SimpleTarget<Bitmap>() { 
        @Override 
        public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 

         ImageView image = new ImageView(getActivity()); 
         image.setImageBitmap(resource); 
         layout.add(image); 
        } 
       }); 

    } 

を試してみて、私はこの方法をintこれらのものをテストしていませんが、それは動作するはずです。

+0

あなたが任意のビューに0とIDを設定することはできませんので、ループの第1回が正しくありません。 –

+0

@ AkshayBhat'AB 'なぜそれを増やしませんか? –

+0

それをインクリメントすると、最初の項目は 'imgList.get(i)'になりません。 –

関連する問題