2012-05-25 5 views
4

Как видите, под элементом нижнего списка в моем ListView есть лишнее пространство, от которого я не могу избавиться. Я пробовал Relative и Linearlayout, оба выглядят так. Вот код: enter image description hereDialogFragment с дополнительным пространством ниже 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, то вам не нужно использовать пользовательский вид. Строитель автоматически добавит 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

Смежные вопросы