Сначала создайте в своей деятельности метод, который возвращает ArrayList.
public ArrayList<User> getUsers() {
return users;
}
Затем в своем фрагменте вам нужно использовать метод getActivity()
для доступа к своей деятельности.Отсюда вы можете привести вызов к конкретному действию, чтобы получить доступ к его методам.Таким образом, ваш вызов будет выглядеть примерно так:
ArrayList<User> users = ((MainActivity)getActivity()).getUsers();
UserAdapter<User> adapter = new UserAdapter<User>(users);
Редактировать: я собираюсь показать другой способ сделать это, чтобы избежать связи фрагмента с действием.В первом примере вам необходимо использовать конкретное действие для получения списка пользователей ArrayList.Этот вид поражает назначение фрагмента, которое заключается в его повторном использовании.Этот фрагмент не сработает сразу, если вы поместите его в другое действие, потому что он привязан конкретно к MainActivity через приведенный вызов getActivity()
.
Лучший способ сделать это - создать интерфейс внутри вашего фрагмента, а затем выполнить любое действие, к которому он присоединен, для реализации этого интерфейса.Это позволит вам добавить фрагмент к любому действию, которое реализует этот интерфейс без изменения кода фрагмента.
Наш фрагмент будет выглядеть так:
public class ExampleFragment {
//Create the interface that will be used to communicate with the
//Activity. For simplicity, we'll just call it UsersProvider.
//Whichever Activity uses this Fragment will implement this interface.
public interface UsersProvider {
public ArrayList<User> getUsers();
}
//Our UsersProvider reference.
private UsersProvider usersProvider;
//Here is where we'll set the Activity as our UsersProvider.
//We're still calling getActivity(), but we're not casting it to
//any specific Activity, rather we're casting it as the interface.
@Override
public void onAttach(Context context) {
usersProvider = (UsersProvider) getActivity();
}
// onCreate, onCreateView etc... goes here
}
Наша деятельность будет выглядеть так:
public class MainActivity extends Activity implements ExampleFragment.UsersProvider {
//It's assumed that this is set somewhere else in the acitivty.
private ArrayList<User> users;
//onCreate, etc...
//Implement the method from UsersProvider interface
@Override
public ArrayList<User> getUsers() {
return users;
}
}
Итак, теперь это настроено так, что ваш фрагментможет быть использован из любой деятельности без изменения кода в вашем фрагментеПросто выполните действие, реализующее интерфейс UsersProvider
, и вы сможете получить доступ к своему ArrayList пользователя в своем фрагменте, вызвав
ArrayList<User> users = usersProvider.getUsers();