2013-11-03 5 views
0

UI를 차단하지 않고 내 LinearLayout에보기를 추가하고 싶습니다.Android - UI를 차단하지 않고 addView

@Override 
protected void onPostExecute(RequestMySellingList result) 
{ 

    for (MySellingData data : result.data) 
    { 
     LinearLayout rowSelling = (LinearLayout) inflater.inflate(R.layout.row_selling_item, null); 

     ImageView iv_sellingItemImage = (ImageView) rowSelling.findViewById(R.id.iv_sellingItemImage); 

     iv_sellingItemImage.setImageBitmap(data.bitmap); 

     // Add rowSelling to the main list holder 
     ll_sellingList.addView(rowSelling); 
    } 
} 

참고 :ll_sellingList는 항목

나는 긴 긴 JSON 응답을 얻고 있기 때문에이 onProgressUpdate()을 사용할 수 없습니다, 나는 전체 JSON을 가져옵니다 onPostExecute() 방법을 사용해야합니다을 보유하고 LinearLayout입니다 의뢰. inflater.inflate() 무거운 작업이기 때문에, UI

+0

runOnUiThread? 이것을 시도 했습니까? 사용하면 조금 더 좋을 것입니다. – Tsunaze

+0

왜 listView를 사용하지 않습니까? 더 효율적으로 만들 수 있습니다. BTW postExecute가 UIThread @ Tsunaze에서 실행됩니다. – Devrim

+0

ScrollView를 사용하고 있기 때문에 listView를 사용하지 않습니다. –

답변

0

그것은 UI를 차단 addView 블록 -

문제는 요구가 매우 긴 경우이다. 또한 findViewById도 값싼 작업이 아닙니다. 그리고 for 루프에서 여러 번 호출합니다. 그래서, 이것들을 for 루프에서 빠져 나오게하십시오. UI를 차단하지 않고 더 빠르게 작동하는지보십시오.

@Override 
protected void onPostExecute(RequestMySellingList result) 
{ 

    LinearLayout rowSelling = (LinearLayout) inflater.inflate(R.layout.row_selling_item, null); 

    ImageView iv_sellingItemImage = (ImageView) rowSelling.findViewById(R.id.iv_sellingItemImage); 

    for (MySellingData data : result.data) 
    { 
      iv_sellingItemImage.setImageBitmap(data.bitmap); 

      // Add rowSelling to the main list holder 
      ll_sellingList.addView(rowSelling); 
    } 
} 
+0

E/AndroidRuntime (24345) : java.lang.IllegalStateException : 지정된 자식에 이미 부모가 있습니다. 먼저 부모의 부모에 대해 removeView()를 호출해야합니다. –

+0

UI를 차단하는 이유를 지적하고 싶습니다. 나는 당신이 당신의 접근 방식을 여기에서 바꿔야한다고 생각합니다. 예를 들어 각 이미지에 선형 레이아웃을 추가하는 대신 어댑터를 사용하십시오. AsyncTask 코드를 모두 게시하면 더 많은 것을 도울 수 있습니다. –

관련 문제