如何在Intent Service中获取Activity

B M*_*B M 5 android android-intent intentservice

我想在意向服务中获得活动.在意向服务中,将数据填充到列表控件.当我在FloatSomeService(IntentService)中调用DictionaryListAdapter时,不要获取活动.
(FloatSomeService.java)服务

 public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();   
    windowManager = (WindowManager)getSystemService(WINDOW_SERVICE);
    // Find Controls
    LayoutInflater inflater = LayoutInflater.from(this);        
    viewFloat = inflater.inflate(R.layout.float_view, null);        
    listview = (ListView)viewFloat.findViewById(R.id.listDic);  
    this.generateData();

    // *** Error : When create adapter, get activity from base context *** //
    myAdapter = new DictionaryListAdapter((Activity)getBaseContext(), myListItem);

    listview.setAdapter(myAdapter);
    ......................
    windowManager.addView(viewFloat, parameters);
}
Run Code Online (Sandbox Code Playgroud)

(DictionaryListAdapter.java)

public class DictionaryListAdapter extends BaseAdapter{
private Activity myContext;
private ArrayList<HistoryListItem> myItems;
public DictionaryListAdapter(Activity activity, ArrayList<DictionaryListItem> items){
    this.myContext = activity;
    this.myList = items;
}

public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    if (convertView == null) {
        LayoutInflater layoutInflater = this.myContext.getLayoutInflater();
        convertView = layoutInflater.inflate(R.layout.history_list_item, null);
    }
    ImageView imgPerson = (ImageView)convertView.findViewById(R.id.imgPerson);
    ...........................
}}
Run Code Online (Sandbox Code Playgroud)

B M*_*B M 1

我使用了一些列表控件数据绑定的技巧。我用 LayoutInflater 解决了。如果我得到布局充气器,我可以将数据填充到控件中。Intent Service可以获得Layout Inflater。我将 LayoutInflater 从意图服务发送到我的 DictionaryListAdapter 类。

没关系对我来说。

(FloatSomeService.java) 意图服务

public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();   
    windowManager = (WindowManager)getSystemService(WINDOW_SERVICE);
    // Find Controls
    LayoutInflater inflater = LayoutInflater.from(this);        
    viewFloat = inflater.inflate(R.layout.float_view, null);        
    listview = (ListView)viewFloat.findViewById(R.id.listDic);  
this.generateData();

// *** Send Inflater to List Adapter
myAdapter = new DictionaryListAdapter((LayoutInflater)getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE), myListItem);
listview.setAdapter(myAdapter);
    ......................
    windowManager.addView(viewFloat, parameters);}
Run Code Online (Sandbox Code Playgroud)

(DictionaryListAdapter.java) 列表适配器

public class DictionaryListAdapter extends BaseAdapter{
private LayoutInflater layoutInflater;
private ArrayList<HistoryListItem> myItems;
    public DictionaryListAdapter(LayoutInflater inflater, ArrayList<DictionaryListItem> items){
        this.layoutInflater = inflater;
        this.myList = items;
    }

public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    if (convertView == null) {
       // don't need activity for layout inflater
        convertView = this.layoutInflater.inflate(R.layout.history_list_item, null);
    }
    ImageView imgPerson = (ImageView)convertView.findViewById(R.id.imgPerson);
    ...........................
}}
Run Code Online (Sandbox Code Playgroud)