在新建AlterDialog中,点击选择铃声按钮,弹出对话框,但是改对话框是白色的,只有点击列表选项的一瞬间才看得到内容,求大侠解释啊。截图:  final Builder b = new AlertDialog.Builder(this);
musicList.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d("click", "成功");
musicFileList = new ArrayList<File>();
adapter.clear();
searchMusci(path);
b.setAdapter(adapter, new android.content.DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
musicPath=musicFileList.get(arg1).getAbsolutePath().toString();

}
});
b.create().show();
}
});

解决方案 »

  1.   

    adapter.clear();干嘛的?
    值得怀疑
      

  2.   

    是防止重复点击铃声选择按钮时,adapter不断增长。
      

  3.   

    package jxh.android.alarm;import java.io.File;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.List;import android.app.Activity;
    import android.app.AlarmManager;
    import android.app.AlertDialog;
    import android.app.AlertDialog.Builder;
    import android.app.PendingIntent;
    import android.app.Service;
    import android.app.TimePickerDialog;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Environment;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.TimePicker;
    import android.widget.Toast;
    public class SpecialAlarm extends Activity {
    static List<File>  musicFileList;
    static String musicPath;
    AlarmManager aManager;
    Calendar currentTime = Calendar.getInstance();
    ArrayAdapter<String> adapter;
    File path;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button addAlarm = (Button)findViewById(R.id.add);
    Button gesture = (Button)findViewById(R.id.gesture);
    Button musicList = (Button)findViewById(R.id.musicList);

    adapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
    final Builder b = new AlertDialog.Builder(this);
    path = Environment.getExternalStorageDirectory();

    // 获取AlarmManager对象
    aManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE);
    addAlarm.setOnClickListener(new OnClickListener() {

    @Override

    public void onClick(View source)
    {
    Calendar currentTime = Calendar.getInstance();
    // 创建一个TimePickerDialog实例,并把它显示出来。
    new TimePickerDialog(SpecialAlarm.this,
    0, // 绑定监听器
    new TimePickerDialog.OnTimeSetListener()
    {
    @Override
    public void onTimeSet(TimePicker tp, int hourOfDay,
    int minute)
    {
    // 指定启动AlarmActivity组件
    Intent intent = new Intent(SpecialAlarm.this
    , RecogniseGesture.class);
    // 创建PendingIntent对象
    PendingIntent pi = PendingIntent.getActivity(
    SpecialAlarm.this, 0, intent, 0);
    Calendar c = Calendar.getInstance();
    c.setTimeInMillis(System.currentTimeMillis());
    // 根据用户选择时间来设置Calendar对象
    c.set(Calendar.HOUR , hourOfDay);
    c.set(Calendar.MINUTE , minute);
    // 设置AlarmManager将在Calendar对应的时间启动指定组件
    aManager.set(AlarmManager.RTC_WAKEUP
    , c.getTimeInMillis(), pi); 
    // 显示闹铃设置成功的提示信息
    Toast.makeText(SpecialAlarm.this , 
    "闹铃设置成功啦" , 3000).show();
    }
    }, currentTime.get(Calendar.HOUR_OF_DAY)
    , currentTime.get(Calendar.MINUTE), false)
    .show();
    }
    });

    gesture.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(SpecialAlarm.this, AddGesture.class);
    startActivity(intent);
    }
    });



    musicList.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    Log.d("click", "成功");
    musicFileList = new ArrayList<File>();
    adapter.clear();
    searchMusci(path);
    b.setAdapter(adapter, new android.content.DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface arg0, int arg1) {
    // TODO Auto-generated method stub
    musicPath=musicFileList.get(arg1).getAbsolutePath().toString();

    }
    });
    b.create().show();
    }
    });
    }

    public void searchMusci(File file) {
    File[] files = file.listFiles();
    for(int i=0; i<files.length; i++) {
    if(files[i].isDirectory()) {
    searchMusci(files[i]);
    }else if(files[i].getName().endsWith(".mp3")){
    musicFileList.add(files[i]);//获得MP3文件的列表
    adapter.add(files[i].getName().toString());
    Log.d("search", "成功");
    }
    }

    }
    }
      

  4.   

    主要的原因是AlertDialog默认背景颜色是白的,里面的文字也是白的,所以看上去就像空的一样,代码改一下,
    先用ListView的方式加载Adapter,再将AlertDialog设置View,代码如下:import java.io.File;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.List;import android.app.Activity;
    import android.app.AlarmManager;
    import android.app.AlertDialog;
    import android.app.PendingIntent;
    import android.app.Service;
    import android.app.TimePickerDialog;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Environment;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.TimePicker;
    import android.widget.Toast;
    public class SpecialAlarm extends Activity {
     static List<File> musicFileList;
     static String musicPath;
     AlarmManager aManager;
     Calendar currentTime = Calendar.getInstance();
     ArrayAdapter<String> adapter;
     File path;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
     // TODO Auto-generated method stub super.onCreate(savedInstanceState);
     setContentView(R.layout.main); Button addAlarm = (Button)findViewById(R.id.btn1);
     Button gesture = (Button)findViewById(R.id.btn2);
     Button musicList = (Button)findViewById(R.id.btn3); adapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
     final AlertDialog.Builder b = new AlertDialog.Builder(this);
     path = Environment.getExternalStorageDirectory();
     
     final ListView lv= new ListView(this);
      // 获取AlarmManager对象
    aManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE);
     addAlarm.setOnClickListener(new OnClickListener() { @Override public void onClick(View source)
     {
     Calendar currentTime = Calendar.getInstance();
     // 创建一个TimePickerDialog实例,并把它显示出来。
    new TimePickerDialog(SpecialAlarm.this,
     0, // 绑定监听器
    new TimePickerDialog.OnTimeSetListener()
     {
     @Override
     public void onTimeSet(TimePicker tp, int hourOfDay,
     int minute)
     {
     // 指定启动AlarmActivity组件
    Intent intent = new Intent(SpecialAlarm.this
     , RecogniseGesture.class);
     // 创建PendingIntent对象
    PendingIntent pi = PendingIntent.getActivity(
     SpecialAlarm.this, 0, intent, 0);
     Calendar c = Calendar.getInstance();
     c.setTimeInMillis(System.currentTimeMillis());
     // 根据用户选择时间来设置Calendar对象
    c.set(Calendar.HOUR , hourOfDay);
     c.set(Calendar.MINUTE , minute);
     // 设置AlarmManager将在Calendar对应的时间启动指定组件
    aManager.set(AlarmManager.RTC_WAKEUP
     , c.getTimeInMillis(), pi);  
    // 显示闹铃设置成功的提示信息
    Toast.makeText(SpecialAlarm.this ,  
    "闹铃设置成功啦" , 3000).show();
     }
     }, currentTime.get(Calendar.HOUR_OF_DAY)
     , currentTime.get(Calendar.MINUTE), false)
     .show(); 
    }
     }); gesture.setOnClickListener(new OnClickListener() { @Override
     public void onClick(View v) {
     // TODO Auto-generated method stub
     Intent intent = new Intent(SpecialAlarm.this, AddGesture.class);
     startActivity(intent);
     }
     });