2016-05-23 3 views
0

У меня есть ListFragment с некоторыми данными. Я пытаюсь сортировать содержимое своего списка в зависимости от того, какой элемент я выбираю из меню. Как я могу обновить содержимое списка, когда я выбираю один параметр из меню? Я не хочу создавать другой фрагмент, просто хочу сортировать по имени или по дате информацию, которая у меня есть в списке, поэтому, когда я нажимаю на один элемент в меню, список сразу обновляется в зависимости от того, нажимаю ли я сортировку по имени или сортировать по дате.Обновление содержимого в ListFragment в меню нажмите

public class MainActivity extends AppCompatActivity{ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main_menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_sort_by_name) { 
     Fragment currentFragment =  this.getFragmentManager().findFragmentById(R.id.fragment1); 
     ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.Months, android.R.layout.simple_list_item_1); 
     setListAdapter(adapter); 
    } 
    return super.onOptionsItemSelected(item); 
} 

И тогда у меня есть класс Java для фрагмента:

public class EventsListFragment extends ListFragment implements  OnItemClickListener { 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.list_fragment, container, false); 
    return view; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.Planets, android.R.layout.simple_list_item_1); 
    setListAdapter(adapter); 
    getListView().setOnItemClickListener(this); 
} 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position,long id) { 
    Toast.makeText(getActivity(), "Item: " + position, Toast.LENGTH_SHORT).show(); 
} 
+0

Похоже, вы можете обновить сортировку для [ArrayAdapter] (https://developer.android.com/reference/android/widget/ArrayAdapter.html#sort%28java.util.Comparator%3C?%20super% 20T% 3E% 29) – zec

ответ

0

Используйте Sort (компаратор) или с помощью фильтра на массив или пользовательский адаптере - в зависимости от сложности объекта адаптера

некоторые примеры и ссылки:

базовый пример для адаптера массива:

Adapter.sort(new Comparator<Item>() { 
    @Override 
    public int compare(Item lhs, Item rhs) { 
     return lhs.compareTo(rhs); //Your sorting algorithm 
    } 
}); 

* Предмет - определение класса элемента адаптера

массив адаптер док ссылка:

полное решение для Вашего случая:

+0

wow собирается для золота! – zec