2010-07-07 3 views
1

웹 서버에서 데이터를 가져 오는 행에 의해 채워지는 목록보기가 있습니다. 데이터를 다시 다운로드하려면 새로 고침 버튼이 있어야합니다. asinctask (doinbackground에서 데이터 가져 오기)를 통해 데이터를 가져온 다음 onpostexecute에서 listadapter를 설정합니다. 모든 것을 처리해야하는 asynctask를 실행하려면 모두목록보기 새로 고침

새 PopulateListTask(). execute();

그러나 oncreate에서했던 것처럼 새 optionsSelect 메서드를 사용하여 새 asynctask를 만드는 것은 아무 것도하지 않습니다. doInBackground에도 들어 가지 않습니다. 나는 listView.invalidate() 및 listView.invalidateViews()를 사용하여 시도했다. 목록 뷰를 다시 채우는 특별한 방법이 있습니까?

내 유일한 추측은 사용자 정의 어댑터를 사용하고 있기 때문에 getView 메소드가 어떤 종류의 오류를 생성하고 있지만 이것이 내 asynctask의 doInBackground 메소드를 입력하지 않는 이유를 설명하지 않는다는 것입니다. 생각?

편집 : 일부 코드 게시. 이것은 정돈 된 버전입니다.

private class PopulateListTask extends AsyncTask<Void, Void, ArrayList<Quote>>{ 

@Override 
protected ArrayList<Quote> doInBackground(Void... params) { 

quotes = Helper.getQuotes(); 

return quotes; 

} 

@Override 
protected void onPostExecute(ArrayList<Quote> quotes){ 

setListAdapter(new QuoteAdapter(ctx,R.layout.quote_row,quotes)); 

} 


} 

private class QuoteAdapter extends ArrayAdapter<Quote>{ 

    ArrayList<Quote> items; 
    int resource; 

    public QuoteAdapter(Context context, int textViewResourceId, ArrayList<Quote> items){ 
     super(context, textViewResourceId, items); 

this.items = items; 
this.resource = textViewResourceId; 




    } 

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

     View v = convertView; 

     LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(resource,null); 

     // do stuff with v 

     return v; 
} 



} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch (item.getItemId()){ 

    case(MENU_REFRESH): 
     new PopulateListTask().execute(); 


} 

`

`

좋아 희망이 작동합니다, 미안 해요 아직도 가장 좋은 방법은 코드를 입력 완전히 확인합니다.

Edit2가 : 내 AsyncTask를 2 시간을 실행할 때

내 로그 캣이납니다. 무슨 뜻인지 알 겠어? 나는 아무 소용이 있어도 인터넷 검색을 시도했다.

W/InputManagerService는 (52) : 오류 내 옵션 작성 있었다 [email protected]

+0

사용자 지정 어댑터, 작업 및 새로 고침 단추의 onClick에 대한 코드를 게시하십시오. –

+0

코드를 입력하십시오. 나는 notifydatasetchanged와 notifydatanull 또는 다른 방법이 무엇이든간에 전화하라고 들었다. 하지만 실제로 배열에 추가하고 repopulating, 나는 완전히 listview 파괴하고 다시 처음부터 다시 싶어요. – Falmarri

답변

0

: 창 이미 초점 이득을 무시 집중 하위 메뉴. 내가 가지고있다

menu.addSubMenu (MENU_REFRESH, 0, 0, "새로 고침");

isntead

menu.addSubMenu의 (0, MENU_REFRESH, 0, "새로 고침");

관련 문제