2012-08-27 2 views
0

내 활동에 ListView이 있습니다. 버튼을 클릭하면, AynscTask이 완료되면이 결과를 보여 onPostExcecuteMethod있어 BaseAdapter에서 ListView 그에 부착하는 호출됩니다내 활동 스레드에서 내 어댑터의 행을 어떻게 수정할 수 있습니까?

public class SearchResultsAdapter extends BaseAdapter {  
    private static ArrayList<Result> objResults; 
    private Search ctxContext = null; 

    public SearchResultsAdapter(Search ctxContext, ArrayList<Result> objResults) { 
     this.ctxContext = ctxContext; 
     SearchResultsAdapter.objResults = objResults; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater mInflater = LayoutInflater.from(ctxContext); 
     View vewRow = mInflater.inflate(R.layout.row, null); 
     TextView tvwName = (TextView) vewRow.findViewById(R.id.name); 
     tvwName.setText(objResults.get(position).getName()); 
     return vewRow; 
    } 
} 
: 어댑터가 매우 단순화 된 노트에 다음과 같습니다

protected void onPostExecute(ArrayList<Result> objResults) { 
    ListView lvwResults = (ListView) objContext.findViewById(R.id.results); 
    lvwResults.setAdapter(new SearchResultsAdapter(this.objContext, objResults));  
} 

처음에 AsyncTask을 호출 한 주된 활동 인 Activity에서 나는 SearchResultsAdapter에있는 결과 목록에서 정렬 및 필터링 작업을 수행하고 싶습니다. 어떻게해야합니까?

어댑터 인스턴스에 액세스 할 수없는 것 같아 기본 UI 스레드에서 어댑터 행에 어떻게 액세스합니까? notifyDatasetChanged() 또는 무엇인가를 호출하는 것에 대해서도 읽었습니까?

감사합니다.

답변

2

일반적으로 어댑터의 메소드에서 수행하려고하는 정렬을 유지합니다. 그런 다음 Main Activity에서 어댑터의 메서드를 호출합니다 (어댑터 인스턴스를 만들 때 저장합니다).

마무리 할 때 어댑터 메소드에서 notifyDataSetChanged/Invalidated를 호출하는 것을 잊지 마십시오.

0

AsyncTask를 시작하기 전에 빈 arraylist로 어댑터를 작성하십시오. 사후에 어댑터를 초기화하는 데 사용 된 빈 arraylist에 결과를 추가하십시오. 어댑터의 notifyDataSetChanged()를 호출하십시오.

ListView의 getAdapter() 메소드를 통해 어댑터에 액세스하거나 어댑터를 멤버 변수로 만들 수 있습니다.

관련 문제