在DialogManager代碼中使用private Dialog dialog;好像有問(wèn)題,代碼不錯(cuò)就是包空指針異常,使用AlertDialog.Builder解決了這個(gè)問(wèn)題:
package com.xuliugen.weichat.view;
import android.app.AlertDialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.xuliugen.weichat.R;
/**
?* 用于管理Dialog
?*?
?* @author xuliugen
?*?
?*/
public class DialogManager {
private AlertDialog.Builder builder;
private ImageView mIcon;
private ImageView mVoice;
private TextView mLable;
private Context mContext;
private AlertDialog dialog;//用于取消AlertDialog.Builder
/**
* 構(gòu)造方法 傳入上下文
*/
public DialogManager(Context context) {
this.mContext = context;
}
// 顯示錄音的對(duì)話框
public void showRecordingDialog() {
builder = new AlertDialog.Builder(mContext, R.style.AudioDialog);
LayoutInflater inflater = LayoutInflater.from(mContext);
View view = inflater.inflate(R.layout.dialog_recorder,null);
mIcon = (ImageView) view.findViewById(R.id.id_recorder_dialog_icon);
mVoice = (ImageView) view.findViewById(R.id.id_recorder_dialog_voice);
mLable = (TextView) view.findViewById(R.id.id_recorder_dialog_label);
builder.setView(view);
builder.create();
dialog = builder.show();
}
public void recording(){
if(dialog != null && dialog.isShowing()){ //顯示狀態(tài)
mIcon.setVisibility(View.VISIBLE);
mVoice.setVisibility(View.VISIBLE);
mLable.setVisibility(View.VISIBLE);
mIcon.setImageResource(R.drawable.recorder);
mLable.setText("手指上滑,取消發(fā)送");
}
}
// 顯示想取消的對(duì)話框
public void wantToCancel() {
if(dialog != null && dialog.isShowing()){ //顯示狀態(tài)
mIcon.setVisibility(View.VISIBLE);
mVoice.setVisibility(View.GONE);
mLable.setVisibility(View.VISIBLE);
mIcon.setImageResource(R.drawable.cancel);
mLable.setText("松開(kāi)手指,取消發(fā)送");
}
}
// 顯示時(shí)間過(guò)短的對(duì)話框
public void tooShort() {
if(dialog != null && dialog.isShowing()){ //顯示狀態(tài)
mIcon.setVisibility(View.VISIBLE);
mVoice.setVisibility(View.GONE);
mLable.setVisibility(View.VISIBLE);
mIcon.setImageResource(R.drawable.voice_to_short);
mLable.setText("錄音時(shí)間過(guò)短");
}
}
// 顯示取消的對(duì)話框
public void dimissDialog() {
if(dialog != null && dialog.isShowing()){ //顯示狀態(tài)
dialog.dismiss();
dialog = null;
}
}
// 顯示更新音量級(jí)別的對(duì)話框
public void updateVoiceLevel(int level) {
if(dialog != null && dialog.isShowing()){ //顯示狀態(tài)
mIcon.setVisibility(View.VISIBLE);
mVoice.setVisibility(View.VISIBLE);
mLable.setVisibility(View.VISIBLE);
//設(shè)置圖片的id
int resId = mContext.getResources().getIdentifier("v"+level, "drawable", mContext.getPackageName());
mVoice.setImageResource(resId);
}
}
}
2015-05-04
恩,可能和Dialog的style有關(guān)系,可以嘗試通過(guò)設(shè)置parent屬性解決
最后,多謝分享解決方案。