Я хотел бы изменить цикл for для фрагмента, содержащего карточки (как показано на рисунке), для каждого «тестового теста» TextView, чтобы он отображал, например, свою позицию в ArrayAdapter.(итак, Арно Дюбуа имеет «1» вместо «тестовый тест», Джон Сноу имеет «2» и т. д.) ...
Я настаиваю на том, что это должно быть сделано во фрагменте,а не в классе arrayadapter.
Кажется, я не могу получить доступ к TextView из самого фрагмента, только в классе ArrayAdapter.У меня есть некоторый код для фрагмента здесь, но элементы не меняются.Код, который должен обновлять каждый элемент, находится в «onConfirmedFriendsReceivedEvent».
public class FriendsFragment extends BaseFragment implements MaterialSearchBar.OnSearchActionListener {
ListView mFriendsList;
ConfirmedFriendsAdapter adapter;
private MaterialSearchBar searchBar;
View root_view;
public FriendsFragment(){
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
View view = inflater.inflate(R.layout.fragment_friends, container, false);
root_view = view;
initUI(view);
initEvent(view);
return view;
}
public static FriendsFragment newInstance(@Nullable Bundle params){
Bundle args = (params == null) ? new Bundle() : params;
FriendsFragment fragment = new FriendsFragment();
fragment.setArguments(args);
return fragment;
}
@Override
void initUI(@Nullable final View view){
mFriendsList = view.findViewById(R.id.friends_list);
mFriendsList.setEmptyView(view.findViewById(R.id.empty));
searchBar = (MaterialSearchBar) root_view.findViewById(R.id.friends_searchBar);
searchBar.setHint("Search friends...");
//enable searchbar callbacks
searchBar.setOnSearchActionListener(this);
}
@Override
void initEvent(@Nullable final View view){
FriendsDataManager.getConfirmedFriends();
}
@Override
public void onSearchStateChanged(boolean enabled) {
String s = enabled ? "enabled" : "disabled";
Toast.makeText(getContext(), "Search " + s, Toast.LENGTH_SHORT).show();
//if (!searchBar.isSearchEnabled()) searchBar.enableSearch();
}
@Override
public void onSearchConfirmed(CharSequence text) {
String search = text.toString();
FriendsDataManager.getSearchedFriends(search);
}
@Override
public void onButtonClicked(int buttonCode) {
switch (buttonCode) {
case MaterialSearchBar.BUTTON_NAVIGATION:
Toast.makeText(getContext(), "Machin truc", Toast.LENGTH_SHORT).show();
break;
case MaterialSearchBar.BUTTON_SPEECH:
break;
case MaterialSearchBar.BUTTON_BACK:
FriendsDataManager.getConfirmedFriends();
break;
}
}
@Subscribe
public void onConfirmedFriendsReceived(ConfirmedFriendsEvent event){
adapter = new ConfirmedFriendsAdapter(getActivity(), event.mConfirmedFriends);
mFriendsList.setAdapter(adapter);
adapter.setNotifyOnChange(true);
for(int i=0; i<adapter.getCount(); i++){
View v = getViewByPosition(i, mFriendsList);
TextView msg = v.findViewById(R.id.friend_message);
msg.setText(i);
}
}
public View getViewByPosition(int pos, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;
if (pos < firstListItemPosition || pos > lastListItemPosition ) {
return listView.getAdapter().getView(pos, null, listView);
} else {
final int childIndex = pos - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}
А вот код для класса ArrayAdapter.Обратите внимание, что методы «setMail» и «getMail» недоступны (пока) из фрагмента.Я хотел бы иметь доступ к нему из фрагмента.
public class ConfirmedFriendsAdapter extends ArrayAdapter<ConfirmedFriend> {
private final List<ConfirmedFriend> mConfirmedFriends;
private final Context mContext;
private GeoDataClient geoDataClient;
private Place currentPlace;
String mail;
TextView friend_message;
TextView friend_position;
public ConfirmedFriendsAdapter(@NonNull final Context context, @NonNull final List<ConfirmedFriend> objects){
super(context, R.layout.fragment_friends, objects);
mConfirmedFriends = objects;
mContext = context;
}
@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull final ViewGroup parent){
final ConfirmedFriend confirmedFriend = mConfirmedFriends.get(position);
if(convertView == null){
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_friends_feed, parent, false);
}
mail = confirmedFriend.getDest_user().getMail();
TextView friend_name = convertView.findViewById(R.id.friend_name);
TextView friend_asl = convertView.findViewById(R.id.friend_asl);
friend_message = convertView.findViewById(R.id.friend_message);
friend_position = convertView.findViewById(R.id.friend_position);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
String now = dateFormat.format(date);
try {
Date birthdate = new SimpleDateFormat("yyyy-MM-dd").parse(confirmedFriend.getDest_user().getBirthday());
Date nowDate = new SimpleDateFormat("yyyy-MM-dd").parse(now);
// validate inputs ...
DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
int d1 = Integer.parseInt(formatter.format(birthdate));
int d2 = Integer.parseInt(formatter.format(nowDate));
int age = (d2 - d1) / 10000;
friend_asl.setText(confirmedFriend.getDest_user().getGender() + ", " + age);
} catch (ParseException e) {
e.printStackTrace();
}
friend_name.setText(confirmedFriend.getDest_user().getFirstName() + " " + confirmedFriend.getDest_user().getLastName());
return convertView;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}