2013-10-12 2 views
1

비동기 작업의 doinbackground가 진행률 막대를 표시하는 서버에서 데이터를 가져 오는 동안 listview를 업데이트하기 전에 원을 보여주고 싶지만 listview를 업데이트하는 동안 언젠가는 멈추고 listview는 끝납니다 도시, 난, 업데이트하기 전에 진행 막대의 동결을 제거하려면 여기에 내 코드목록보기를 업데이트하기 전에 진행률 막대 고정

public class feeds extends AsyncTask<Void, Void, ArrayList<HashMap<String, String>>>{ 


       protected void onPreExecute() { 
        // SHOW THE SPINNER WHILE LOADING FEEDS 
        linlaHeaderProgress.setVisibility(View.VISIBLE);  
       } 

       @Override 
       protected ArrayList<HashMap<String, String>> doInBackground(Void... params) { 
        new_request_feeds(); //here i am fetching data from server 
        return fetch; 
       } 

       protected void onPostExecute(ArrayList<HashMap<String, String>> result) { 

        // HIDE THE SPINNER AFTER LOADING FEEDS 
        linlaHeaderProgress.setVisibility(View.GONE); 
        if(result.size()!=0) 
        { 
         adapter=new CustomListAdapter(getActivity(), R.id.list_ongoing, result); 

          list.setAdapter(adapter);    

        } 
        else 
        { 


         Toast.makeText(getActivity(), "no feeds", 3000).show(); 
        }// Here if you wish to do future process for ex. move to another activity do here 



       } 

내의 getView()

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    final int pos=position; 
    System.out.println(position); 
    View v = convertView; 
    final ViewHolder holder; 

    if (v == null) { 
     LayoutInflater vi = 
      (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.feed_row, null); 
     holder = new ViewHolder(); 
     holder.like=(ImageButton) v.findViewById(R.id.like); 
     holder.share=(ImageButton) v.findViewById(R.id.share); 
     holder.report=(ImageButton) v.findViewById(R.id.report); 
     holder.headline_text = (TextView) v.findViewById(R.id.lar); 
     holder.topic_text = (TextView) v.findViewById(R.id.mt); 
     holder.count_likes = (TextView) v.findViewById(R.id.count_likes); 
     holder.count_shares = (TextView) v.findViewById(R.id.count_shares); 
     holder.image = (ImageView) v.findViewById(R.id.img1); 
     holder.image2 = (ImageView) v.findViewById(R.id.img2); 
     v.setTag(holder); 

    } 
    else 
     holder=(ViewHolder)v.getTag(); 

    mSharedPreferences= v.getContext().getSharedPreferences("mypref", 0); 

     holder.headline_text.setText(" "+entries.get(pos).get(TAG_FFN)+" had a chance with "+entries.get(pos).get(TAG_IFN)+"! "); 
      holder.topic_text.setText(entries.get(pos).get(TAG_TOPIC)); 
      holder.image.setTag(entries.get(pos).get(TAG_FTID)); 
      holder.image2.setTag(entries.get(pos).get(TAG_ITID)); 
      holder.count_likes.setText(entries.get(pos).get(TAG_LIKERS)+" likes"); 
      holder.count_shares.setText(entries.get(pos).get(TAG_SHARERS)+" shares"); 

      if(entries.get(pos).get(TAG_LIKED).equals("True")) 
      { 
       holder.like.setImageResource(R.drawable.like);      
       holder.like.setTag("True"); 
      } 
      else 
      { 
       holder.like.setTag("False"); 
      } 
      if(entries.get(pos).get(TAG_SHARED).equals("True")) 
      { 

       holder.share.setImageResource(R.drawable.share); 
       holder.share.setEnabled(false); 

      } 


     //=======================setting image of user==========================================// 
     // Loader image - will be shown before loading image 


      // whenever you want to load an image from url 
      // call DisplayImage function 
      // url - image url to load 
      // loader - loader image, will be displayed before getting image 
      // image - ImageView 


      imgLoader.DisplayImage((image_url.getimage(Long.parseLong(entries.get(pos).get(TAG_FTID))))[0],loader, holder.image);   
      imgLoader.DisplayImage((image_url.getimage(Long.parseLong(entries.get(pos).get(TAG_ITID))))[0],loader, holder.image2); 

    //====================================================================================// 



      holder.image.setOnClickListener(new View.OnClickListener() { 


       @Override 
       public void onClick(View v) { 
        if((holder.image.getTag()).equals(mSharedPreferences.getString("USERID", null))) 
        { 

         Toast.makeText(v.getContext(), "Your profile", Toast.LENGTH_LONG).show(); 
        } 
        else 
        { 
        Intent i=new Intent(v.getContext(),OtherProfilePage.class); 
        i.putExtra("Image_id",entries.get(pos).get(TAG_FTID)); 
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        (v.getContext()).startActivity(i); 

        } 

      } 
      }); 

      holder.image2.setOnClickListener(new View.OnClickListener() { 


       @Override 
       public void onClick(View v) { 
        if(holder.image2.getTag().equals(mSharedPreferences.getString("USERID", null))) 
        { 

         Toast.makeText(v.getContext(), "Your profile", Toast.LENGTH_LONG).show(); 
        } 
        else 
        { 
        Intent i=new Intent(v.getContext(),OtherProfilePage.class); 
        i.putExtra("Image_id", entries.get(pos).get(TAG_ITID)); 

        (v.getContext()).startActivity(i); 

        } 

      } 
      }); 

      holder.like.setOnClickListener(new View.OnClickListener() { 


      @Override 
      public void onClick(View v) { 
       if(holder.like.getTag()=="True") 
       { 
        holder.like.setImageResource(R.drawable.like_pressed); 
        holder.like.setTag("False"); 
        new sendlikes().execute("link"); 

       } 
       else 
       { holder.like.setImageResource(R.drawable.like); 
        holder.like.setTag("True"); 
        new sendlikes().execute("link"); 
       } 


     } 
     }); 
      holder.share.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       holder.share.setImageResource(R.drawable.share); 
       holder.share.setEnabled(false); 
      new sendlikes().execute("http://gangster.cloudapp.net/share/",entries.get(pos).get(TAG_CID),mSharedPreferences.getString("person_id",null)); 


     } 
     }); 

     return v; 
     } 

하여 ImageLoader 내가 이미지를 캐시에 사용되는 클래스입니다.

+0

yourlistener.onSucess(result);는, 그것은 당신을 도울 수 있습니다이 링크를 시도하십시오 쓰기에 yourlistener이를 asign contruct 당신의 AsyncTask를에 생성자에 에 http이 varible (listenr)을 보내 : // 유래합니다.co.kr/questions/8322311/in-android-why-my-progressbar-freezes –

+0

어댑터를 설정 한 후 해커를 시도하십시오. –

+0

@ user1920666 완료했으나 작동하지 않았습니다. –

답변

0

else 블록 이후에 linlaHeaderProgress.setVisibility(View.GONE);을 입력하십시오. 희망이 당신을 위해 작동합니다.

+0

아니요 작동하지 않음 –

0

나는 문제가 몇 곳에서 거짓말을 수 있다고 생각 : 당신은 어댑터의 생성자 당신의 데이터 전처리의 좋은 거래를하고있는

1).

onPostExecute()의 모든 내용은 응용 프로그램 UI 스레드에서 실행되므로 어댑터의 생성자가 처리량이 많으면 UI 스레드가 잠길 수 있습니다.

어댑터를 만들려면 doInBackground에서 수행 한 다음 결과로 onPostExecute에 전달하여 setAdapter 호출 만 호출하면됩니다.

2) 어댑터의 getView() 메소드가 효율적이지 않습니다.

setAdapter를 호출하면 AdapterView는 화면에 표시 될 모든 셀에 대해 getView를 호출해야합니다. 많은 셀이 있고 뷰를 확장 하거나ViewsById를 찾는 것과 같이 많은 비용이 드는 작업을 수행하는 경우 초기로드에 대한 UI 스레드를 잠글 수 있습니다.

스크롤링 성능은 어떻습니까? 그것이 부족하다면, getView()가 처음부터 시작될 것이고, 좋은, 효율적인 어댑터를 만드는 방법에 대한 권장 사항을 위해 ListView 성능에 대한 Romain Guy의 훌륭한 대화를 볼 것입니다.

http://www.youtube.com/watch?v=wDBM6wVEO70

+0

예 제 스크롤링 성능이 좋지 않습니다. 뷰 홀더를 사용하고 어댑터 내부의 이미지를 캐싱하고 있지만 여전히 성능이 좋지 않다. –

+0

백그라운드에서 어댑터를 설정하려했지만 오류가 발생한다. 내 코드는 protected ... CustomListAdapter doInBackground (Void PARAMS ...) { \t \t \t \t \t new_request_feeds(); \t \t \t \t \t 어댑터 = 새 CustomListAdapter (getActivity(), R.id.list_ongoing, fetch); \t \t \t \t \t 반환 어댑터; \t \t \t \t –

+1

예, doInBackground에서 어댑터를 설정할 수 없지만 UI 스레드를 필요로하는 CustomListAdapter 생성자에서 아무 작업도하지 않는다고 가정하면 위의 작업을 올바르게 수행 할 수 있습니다. 나는 당신이 UI의 딸꾹질을 일으킬 정도로 일을 둔화 될 수있는 UI 스레드에서 수행 할 수있다 어떤 작업을 살펴 ​​귀하의 getView() 메소드를 프로파일 링 할 필요가 있다고 생각합니다. http://developer.android.com/tools/debugging/debugging-tracing.html 내 customlistadapter의 – sddamico

0

당신에

+0

몇 가지 코드를 제공 할 수 있습니까? onpostexecute이 –

0

작동합니다 onpostexecute이 활동 설정 adpater 청취자 onsuccess는 방법에 완료 될 때 리스너를 추가 한 다음 진행을 기각 활동이이 인터페이스를 추가

public interface asyncListener{ 
     public void onSucess(Object object); 
     public void onFailure(Exception exception); 
    } 

및 가변 문자 추가

asyncListener as= new asyncListener() { 

      @Override 
      public void onSucess(Object object) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onFailure(Exception exception) { 
       // TODO Auto-generated method stub 

      } 
     }; 

는 onpostexecute

+0

onsucces 메소드가 호출 될 것이다, 아무것도 변경되지 –

+0

onsucess라는 task.execute 전에 활동에 진행 대화 상자를 표시하고 작동하지 adpter –

+0

SRY을 설정 한 후 onsucess 방법에 해고에 당신의 방법을 쓸 수를 입력 할 때 –