0

나는 안드로이드 프로그래밍의 초보자입니다. 어쩌면 바보 같은 질문 이겠지요 ... 나는 비동기 작업에 대해 많이 읽으므로 진행률 막대를 추가 할 수 있지만 해결책을 찾을 수는 없습니다 내가 필요합니다 :gridview에 진행률 막대를 추가하는 방법

나는 격자보기를 보여줘야하는데, 나는 그 안에 보여줄 이미지와 텍스트의 데이터를 검색해야합니다. asynctask에서 배열에 상대 데이터를로드하면 그리드의 어댑터에 데이터가 없으며 충돌이 발생합니다. 그렇지 않으면 진행률 대화 상자를 gridview의 oncreate 메서드에 넣으면 데이터로드를 기다리지 만 진행률 막대를 표시하지 않습니다 (데이터로드 중에 데이터로드가 끝날 때까지). 그래서 나는 올바른 접근법을 모른다. 당신이 무엇을 할

...

나는 단지 gridview에 시작하여 데이터를로드, 진행 대화 상자를 보여주고, 마지막에하는 이전 활동을 시작할 생각하지만 그렇지 않아 나에게 경제적 인 접근 방식을 보인다 생각한다?

So : 어떻게하면 asynk 작업에서 어댑터에 데이터를 첨부 할 수 있습니까? notyfydatasetchange와 함께 시도했지만 작동하지 않습니다. 내 onCreate 방법에

이 있습니다. mAdapter = new ImageAdapter (this); mGrid.setAdapter (mAdapter);

하지만 같은 어댑터 생성자는 데이터 (알 적어도 개체의 수 ...)

필요하고 이것이 나의 어댑터입니다 :

public class ImageAdapter extends BaseAdapter{ 
    Context mContext; 
    public final int ACTIVITY_CREATE = dirObjList.size()*2; 
    public ImageAdapter(Context c){ 
     mContext = c; 
     map = new HashMap<Integer,SoftReference<Bitmap>>(); 
    } 
    public Map<Integer,SoftReference<Bitmap>> map; 
    @Override 
    public int getCount() { 
     return dirObjList.size(); 
    } 
    public RowData getItem(int position) { 
     return dirObjList.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    }  

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     RowData currDirObj= getItem(position); 
     if(convertView==null){ 
      LayoutInflater li = getLayoutInflater(); 
      convertView = li.inflate(R.layout.icon, null); 
      holder = new ViewHolder(); 
      holder.tv = (TextView)convertView.findViewById(R.id.icon_text); 
      holder.iv = (ImageView)convertView.findViewById(R.id.icon_image); 
      convertView.setTag(holder); 

      } 
     else{ 
        holder = (ViewHolder)convertView.getTag(); 
      } 

     holder.iv=setThumbs(holder.iv,position); 
     holder.tv.setText(currDirObj.mTitle); 

     convertView.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       SharedPreferences indexPrefs = getSharedPreferences("currentIndex", 
         MODE_PRIVATE); 

       SharedPreferences.Editor indexEditor = indexPrefs.edit(); 
       indexEditor.putInt("currentIndex", 0); 

       SharedPreferences drPrefs = getSharedPreferences("currentDir", 
         MODE_PRIVATE); 

       SharedPreferences.Editor drPath = drPrefs.edit(); 
       drPath.putString("currentDir", dirObjList.get(position).mDetail);     


       drPath.commit(); 
       final Intent intent = new Intent(ImageGrid.this, SpeakinGallery.class); 
       startActivity(intent); 

      } 
     }); 
     return convertView; 
    } 
} 

이 내 비동기 작업

입니다
public class MyTask extends AsyncTask<Void, Void, String> { 
    ProgressDialog progress; 
     public MyTask(ProgressDialog progress) { 
      this.progress = progress; 
     } 

     public void onPreExecute() { 
     progress.show(); 
     } 

     public String doInBackground(Void...unused) { 
      getSubDirs(startDIRECTORY); 
      return "foo"; 
     } 

     public void onPostExecute(Void unused) { 
      progress.dismiss(); 
      //mAdapter.notifyDataSetChanged(); 
     } 
} 
+0

무엇 당신의 AsyncTask를이 생겼 전화? –

답변

0

AsyncTask는 가장 확실하게 친구입니다. AsyncTask 클래스 내에 ProgressDialog의 멤버 인스턴스를 생성하는 것이 효과적이라는 것을 알았습니다. MyActivity라는 Activity 클래스가 있다고 가정 해 보겠습니다. DownloadTask라는 내부 클래스를 만듭니다. 당신의에서 onCreate() 메소드에서

private class DownloadTask extends AsyncTask<Object, Void, Object> { 

    private ProgressDialog dialog; 

    @Override 
    protected void onPreExecute() { 
     dialog = ProgressDialog.show(MyActivity.this, "", "Loading..."); 
    } 

    @Override 
    protected Object doInBackground(Object... params) { 
     // download information and return it 
     return dataObject; 
    } 

    @Override 
    protected void onPostExecute(Object result) { 
     // use result object from background task and 
     // attach data to adapter 
     dialog.dismiss(); 
    } 

} 

그리고, new DownloadTask().execute();

+0

그것은 별도의 질문 일 수 있습니다. 어떤 종류의 어댑터를 사용하고 있습니까? –

+0

덕분에, 나는 이런 식으로 주장 할 것이다. 나는 내 코드 중 일부를 추가하기 위해 질문을 편집했다 ... – mmmx

+0

그래서, 내 getSubDirs (startDIRECTORY) 함수 에 몇 가지 버그가 있었고, doInBackground가 onPostExecute 메서드의 매개 변수에서 다른 유형을 반환하여 비동기 작업이 올바르게 작동하지 않는 것으로 나타났습니다. 이제 작동합니다! 올바른 방법을 보여줘서 고마워! – mmmx

관련 문제