2012-05-25 35 views
4

正如你所看到的,在我的ListView的底部列表元素下面,有多余的空间,我似乎无法摆脱。我试过Relative和Linearlayout,都是这样的。下面的代码: enter image description here带有额外空间的DialogFragment ListView

public class ChooseDialog extends DialogFragment implements 
     DialogInterface.OnClickListener { 

    String URLhome; 
    String Title; 
    String type; 

/* public static ChooseDialog newInstance() { 
     ChooseDialog dialog = new ChooseDialog(); 
     Log.v("a", "shit runs"); 
     Bundle bundle = new Bundle(); 
     dialog.setArguments(bundle); 
     return dialog; 
    }*/ 

    public ChooseDialog(String type) { 
     this.type = type; 
    } 

    @Override 
    public void onCreate(Bundle bundle) { 
     super.onCreate(bundle); 
     setCancelable(true); 
     int style = DialogFragment.STYLE_NORMAL, theme = 0; 
     setStyle(style, theme); 
    } 

    @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
      builder.setTitle(type); 
      builder.setNegativeButton("Cancel", this); 
      LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View dialogLayout = inflater.inflate(R.layout.dialog, null); 
      builder.setView(dialogLayout); 

      final String[] items = {"Red", "Green", "Blue" }; 

      builder.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, items), 
        new DialogInterface.OnClickListener() { 


       public void onClick(DialogInterface dialog, int which) { 
        Log.v("touched: ", items[which].toString()); 

       }} 
       ); 


      return builder.create(); 

     } 

    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     // TODO Auto-generated method stub 

    } 

} 

这启动对话的代码:

public OnClickListener listener = new OnClickListener() { 
    public void onClick(View v) { 
     showNationalityDialog(); 
    } 
}; 

private void showNationalityDialog() { 
    FragmentManager fm = getSupportFragmentManager(); 
    ChooseDialog nationalityDialog = new ChooseDialog("Nationality"); 

    nationalityDialog.show(fm, "fragment_edit_name"); 
} 

回答

3

我知道这个问题从来没有颇得关注,但我终于解决了这个问题。

通过使用我在XML中创建的列表视图而不是设置构建器的适配器,我设法摆脱了所有多余的空间。

下面是新的代码如下所示:

switch (editText.getId()) { 
    case (0) : 
    ListView list = (ListView) dialogLayout.findViewById(R.id.listView1); 
    list.setAdapter(new ArrayAdapter<String>(activity, R.layout.dialoglist, 
      activity.getResources().getStringArray(R.array.ageArray))); 
    list.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      editText.setText(activity.getResources().getStringArray(R.array.ageArray)[arg2]); 
      dismiss(); 
     } 
    }); 
    builder = (Integer.parseInt(android.os.Build.VERSION.SDK) < 11)? new AlertDialog.Builder(activity) : 
     new AlertDialog.Builder(activity, android.R.style.Theme_Translucent); 
    builder.setNegativeButton("Cancel", this); 
    builder.setView(dialogLayout); 

    return builder.create(); 
+0

取代'android.R.style.Theme_Translucent'我用了'android.R.style.Theme_DeviceDefault_Panel' – Tejas

2

如果要设置上的警告对话框中的自定义视图(通过的setView())仅具有一个ListView那么你就需要使用自定义视图。如果调用set适配器,构建器会自动将ListView添加到视图中。 列表视图结尾处的额外空间可能是您的自定义视图,并且没有内容。

例如:

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    final AccountChooserListAdapter adapter = new AccountChooserListAdapter(getActivity(), R.layout.choose_account_list_item, 
      accountMetadataFactory.getAccountsAsList()); 

    return new AlertDialog.Builder(getActivity()) 
      .setCancelable(true) 
      .setTitle(getActivity().getString(R.string.title_add_account)) 
      .setAdapter(adapter, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        listener.onAddAccount(which); 
       } 
      }) 
      .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
       } 
      }) 
      .create(); 
} 
+0

漂亮的工作。刚从Dialog的代码中删除了所有与布局相关的东西。 – DatBassie