2012-08-27 58 views
0

我有一個ListView在我的活動。在點擊一個按鈕,一個AynscTask被調用時,它完成的時候附加一個BaseAdapterListView在它的onPostExcecuteMethod顯示結果:如何從我的Activity線程修改適配器中的行?

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

適配器看起來像這樣一個非常簡單的音符:

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; 
    } 
} 

從我的主要活動,即最初調用AsyncTaskActivity,我想對結果列表SearchResultsAdapter做一些排序和過濾操作。我怎樣才能做到這一點?

如何從我的主UI線程訪問適配器行,因爲我似乎無法訪問適配器實例?我還讀了一些關於撥打notifyDatasetChanged()什麼的?

謝謝。

回答

2

通常情況下,您會對適配器上的某個方法進行排序。然後從主活動中調用適配器的方法(創建時保存適配器實例)。

並且在完成時不要忘記在適配器方法上調用notifyDataSetChanged/Invalidated。

0

在啓動AsyncTask之前,使用空數組列表創建適配器。在post執行後,將結果添加到您用來初始化適配器的空數組列表中。在適配器上調用notifyDataSetChanged()。

您可以通過ListView的getAdapter()方法訪問適配器,也可以使適配器成爲一個成員變量。

相關問題