お世話になります。
表題ではわかりづらいかと思いますがPagerAdapterのinstantiateItem内の処理が全て完了したタイミングで値を返したいのですがうまくできません
そもそもこの方法を探し出した経緯がViewPager内5ページの内容をPHPが吐いたXMLを読み込んでそれをパースし、Viewにセットしたいのですが各ページにしっかりとデータは反映するのですがページ表示直後だとViewPagerの1ページ目と2ページ目が表示されません
ViewPagerをスクロールし表示されないページから2ページ離れて再度該当ページに戻るとしっかり表示されるのですが読み込み直後だけ表示されていないのでXMLの読み込みとパースがinstantiateItemのreturnに間に合っていないのかと思い今に至りました
以下ソースです
java
1 public Object instantiateItem(View collection, final int position) { 2 llv = new LinearLayout(mContext); 3 llv.setOrientation(LinearLayout.VERTICAL); 4 gl = (Globals) mContext.getApplicationContext(); 5 6 new Thread(new Runnable(){ 7 @Override 8 public void run(){ 9 try{ 10 URL url = new URL( URL ); 11 Log.d("URL1212",url.toString()); 12 HttpURLConnection con = (HttpURLConnection)url.openConnection(); 13 str = InputStreamToString(con.getInputStream()); 14 Log.d("xml",str); 15 16 }catch (Exception ex){ 17 System.out.println(ex); 18 } 19 20 } 21 }).start(); 22 23 while(str !=null){ 24 //xmlparse開始 25 XmlPullParser xpp = Xml.newPullParser(); 26 try{ 27 xpp.setInput(new StringReader(str)); 28 }catch (XmlPullParserException e){ 29 30 } 31// XML解析 32 try { 33 int eventType; 34 eventType = xpp.getEventType(); 35 36 final LinearLayout llh = new LinearLayout(mContext); 37 llh.setOrientation(LinearLayout.HORIZONTAL); 38 39 while (eventType != xpp.END_DOCUMENT) { 40 if((eventType == xpp.START_TAG)){ 41 if(("DateTitle"+position).equals(xpp.getName())){ 42// llv = new LinearLayout(mContext); 43// llv.setOrientation(LinearLayout.VERTICAL); 44 final TextView tv = new TextView(mContext); 45 final String txt = xpp.nextText(); 46 handler.post(new Runnable() { 47 @Override 48 public void run() { 49 tv.setTextSize(12); 50 tv.setBackgroundColor(Color.parseColor("#d3d3d3")); 51 tv.setText(txt); 52 llh.addView(tv); 53 } 54 }); 55 }else if(("DateData"+position).equals(xpp.getName())){ 56 final TextView tv = new TextView(mContext); 57 final String txt = xpp.nextText(); 58 handler.post(new Runnable() { 59 @Override 60 public void run() { 61 tv.setTextSize(18); 62 tv.setText(txt); 63 llh.addView(tv); 64 llv.addView(llh); 65 } 66 }); 67 } 68 } 69 70 eventType = xpp.next(); 71 } 72 }catch (Exception e){ 73 Log.d("XmlPullParser", String.valueOf(e)); 74 } 75 ((ViewPager) collection).addView(llv,0); 76 //strに値が入ったら1回だけまわってループを脱出 77 break; 78 } 79 return llv; 80 }
知識がなさ過ぎて原因究明もまともにできておりません故他に原因等ございましたらご教授頂けますと幸いでございます
よろしくお願いします
//-------追記---------//
java
1 public Object instantiateItem(View collection, final int position) { 2 llv = new LinearLayout(mContext); 3 llv.setOrientation(LinearLayout.VERTICAL); 4 gl = (Globals) mContext.getApplicationContext(); 5 6 new Thread(new Runnable(){ 7 @Override 8 public void run(){ 9 try{ 10 URL url = new URL("http://153.149.37.82/Eigyo_Test/xml/detail.php?position=" + position + "&search="+ gl.ProspectId +"&comcode=" + gl.ComCode + "&logid=" + gl.tID ); 11 Log.d("URL1212",url.toString()); 12 HttpURLConnection con = (HttpURLConnection)url.openConnection(); 13 String str = InputStreamToString(con.getInputStream()); 14 Log.d("xml",str); 15 16 while(str !=null){ 17 //xmlparse開始 18 XmlPullParser xpp = Xml.newPullParser(); 19 try{ 20 xpp.setInput(new StringReader(str)); 21 }catch (XmlPullParserException e){ 22 23 } 24// XML解析 25 try { 26 int eventType; 27 eventType = xpp.getEventType(); 28 29 final LinearLayout llh = new LinearLayout(mContext); 30 llh.setOrientation(LinearLayout.HORIZONTAL); 31 32 while (eventType != xpp.END_DOCUMENT) { 33 if((eventType == xpp.START_TAG)){ 34 if(("DateTitle"+position).equals(xpp.getName())){ 35// llv = new LinearLayout(mContext); 36// llv.setOrientation(LinearLayout.VERTICAL); 37 final TextView tv = new TextView(mContext); 38 final String txt = xpp.nextText(); 39 handler.post(new Runnable() { 40 @Override 41 public void run() { 42 tv.setTextSize(12); 43 tv.setBackgroundColor(Color.parseColor("#d3d3d3")); 44 tv.setText(txt); 45 llh.addView(tv); 46 } 47 }); 48 }else if(("DateData"+position).equals(xpp.getName())){ 49 final TextView tv = new TextView(mContext); 50 final String txt = xpp.nextText(); 51 handler.post(new Runnable() { 52 @Override 53 public void run() { 54 tv.setTextSize(18); 55 tv.setText(txt); 56 llh.addView(tv); 57 llv.addView(llh); 58 } 59 }); 60 } 61 } 62 63 eventType = xpp.next(); 64 } 65 }catch (Exception e){ 66 Log.d("XmlPullParser", String.valueOf(e)); 67 } 68 69 llv.postInvalidate(); 70 71 break; 72 } 73 74 }catch (Exception ex){ 75 System.out.println(ex); 76 } 77 } 78 }).start(); 79 80 ((ViewPager) collection).addView(llv,0); 81 return llv; 82 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/15 09:49