2016-04-19 15 views
7

Tôi có một gói tùy chỉnh tùy chỉnh chứa hai danh sách tùy chỉnh. Do tính chất năng động của hai danh sách, mỗi lần đoạn mẹ tôi được nạp, tôi mới hai mảnh vỡ này bằng cách tạo ra một trường hợp mới của preferencefragment tùy chỉnh:Cuộn đến/thiết lập vị trí tùy chọn danh sách tùy chỉnh

if(themeListFragment != null) { 
    themeListFragment = new ThemeListFragment(); 
    //init fragment 
    getFragmentManager().beginTransaction() 
      .replace(R.id.themeFragmentCont, themeListFragment) 
      .commit(); 
} 

này hoạt động hoàn hảo và ám chỉ rằng sở thích danh sách tùy chỉnh. Mỗi một hai sở thích danh sách được xác định bởi một listpreference tùy chỉnh:

//setup themes list 
if(lp == null) { 
    lp = (ThemeListPreference) findPreference("theme_list"); 
    lp.setOnPreferenceChangeListener(this); 
    refreshThemes(); 
} 

listpreference tùy chỉnh của tôi chủ yếu là có để làm một số hoạt động trước khi tạo hộp thoại, vì vậy nó sẽ ghi đè phương thức:

@Override 
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { 
    int index = preferences.getInt(getContext().getString(R.string.theme_id),getContext().getResources().getInteger(R.integer.default_theme_id)); 

    System.out.println(index); 

    ListAdapter listAdapter = new ThemeListAdapter(getContext(), 
      R.layout.image_list_row, this.getEntries(), 
      themes, index, 
      this); 

    builder.setAdapter(listAdapter, this); 

    super.onPrepareDialogBuilder(builder); 
} 

công trình Tất cả mọi thứ tuyệt vời từ đầu đến cuối, nhưng khi danh sách đủ dài, việc cuộn sẽ trở thành vấn đề vì cửa sổ bật lên danh sách không tự động cuộn đến mục tùy chọn đã chọn.

Tất cả các bài đăng trên web cho vấn đề này giả định rằng bạn có thể lấy listview bên dưới theo id và chỉ cần cuộn trơn tru (hoặc tương tự) để chuyển đến mục danh sách thích hợp. Tuy nhiên, trong trường hợp của tôi, không có id xem danh sách, vì vậy tôi không thể tham chiếu nó (ít nhất là từ kiến ​​thức hạn chế của tôi). Có cách nào có thể để làm điều này?

Trả lời

0

ListPreference sử dụng AlertDialog.Builder.setSingleChoiceItems(), đảm bảo mục hiện được chọn hiển thị. Vì vậy, trong trường hợp của bạn thay

builder.setAdapter(listAdapter, this); 

với:

builder.setSingleChoiceItems(listAdapter, index, this); 
+0

Cảm ơn đã gợi ý - danh sách này dường như có cùng một chức năng chính xác mặc dù không may. Nó vẫn hiển thị ở đầu danh sách và yêu cầu cuộn xuống để xem mục đã chọn. – runfaj

+0

Lạ, sự khác biệt duy nhất tôi có thể thấy với trường hợp của bạn là tôi đã phân lớp 'DialogPreference' thay vì' ListPreference', bởi vì tôi đã gặp vấn đề với cách 'ListPreference' xử lý danh sách nhãn và giá trị – bwt

Các vấn đề liên quan