2016-03-15 40 views
0

使用getLayoutInflater():無法在Android的

View uploadProgressView = getLayoutInflater().inflate(R.layout.view_upload_progress, null); 
UploadProgressViewHolder viewHolder = new UploadProgressViewHolder(uploadProgressView, filename); 

我可以使用getLayoutInflater()但是當我改變extends Services它不工作。

我是Stackoverflowfrom this post研究和接收答案,並更改爲:

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View uploadProgressView = inflater.inflate(R.layout.view_upload_progress, null); 
UploadProgressViewHolder viewHolder = new UploadProgressViewHolder(uploadProgressView, filename); 

但它不工作,如何使用getLayoutInflater()

此拋出異常: java.lang.NullPointerException

CallRecordService.addUploadToList(CallRecordService.java:167) 錯誤在第一線LayoutInflater inflater = ......

Context context; 
private void addUploadToList(String uploadID, String filename) { 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View uploadProgressView = inflater.inflate(R.layout.view_upload_progress, null); 
    UploadProgressViewHolder viewHolder = new UploadProgressViewHolder(uploadProgressView, filename); 
    viewHolder.uploadId = uploadID; 
    container.addView(viewHolder.itemView, 0); 
    uploadProgressHolders.put(uploadID, viewHolder); 
} 
+0

爲什麼第二段代碼無法正常工作? – 0xDEADC0DE

+0

你是什麼意思「但它不工作」?這是一個編譯錯誤?或者你得到空引用? –

+1

*我改變擴展服務,它不工作*,這是預期的行爲。服務沒有UI – Blackbelt

回答

1

更改以下行類,

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

這是因爲,ServiceContext。服務延伸ContextWrapper,延伸Context。您也可以在服務中使用「this」關鍵字。

+0

謝謝。它通過行inflater,但在此行中引發異常:'container.addView(viewHolder.itemView,0);'這樣的錯誤:'CallRecordService.addUploadToList(CallRecordService.java:173)' –

0

你需要使用LayoutManager增加觀看後佈局添加到WindowManager

windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 
windowManager.addView(view, getLayoutParams()); 
0

如果您在擴展Service您可以使用

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

LayoutInflater inflater = LayoutInflater.from(this); 

兩者都是有效的,因爲一個ServiceContext