В моем приложении есть активность панели активности. В этом действии есть два нижних меню навигации, у меня проблема с первым именем меню ВСЕГО порядка.
В классе фрагмента заказа ВСЕ есть макет вкладок с адаптером viewpager2, и на каждой вкладке есть фрагмент...
Во фрагменте у меня есть recyclerview и элемент recyclerview, поступающий из API, а в элементе recyclerview есть одна кнопка принятия заказа, при нажатии кнопки элемент должен быть удален из recyclerview..
Код работает нормально до сих пор, теперь я хочу, чтобы удаляемый элемент также немедленно удалялся из списка в другом фрагменте вкладки, который должен обновить recyclerview, чтобы мой удаленный элемент отображался на этой второй вкладке.
Это обрабатывается вызовом API, мне просто нужно снова выполнить весь метод, который я вызываю при запуске активности, потому что обновленные данные не отображаются, пока я снова не вернусь в действие..
public class InProgress extends Fragment implements InProgressAdapter.OrderActionListener {
ArrayList progressDataList;
RecyclerView recyclerView;
public InProgress() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_in_progress, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
recyclerView = view.findViewById(R.id.rvInProgress);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setHasFixedSize(true);
progressDataList = new ArrayList();
fetchData();
}
public void fetchData(){
ApiService apiService = getRetrofitInstance().create(ApiService.class);
Call call = apiService.getPendingOrder();
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()){
progressDataList.addAll(response.body());
InProgressAdapter inProgressAdapter = new InProgressAdapter(getContext(),progressDataList, InProgress.this);
recyclerView.setAdapter(inProgressAdapter);
}
else{
Toast.makeText(getContext(), "Error..", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call call, Throwable t) {
Toast.makeText(getContext(), "Failed..", Toast.LENGTH_SHORT).show();
}
});
}
public void dispatchedOrder(String orderNo, int position){
ApiService apiService = getRetrofitInstance().create(ApiService.class);
UpdateOrderStatusData updateOrderStatusData = new UpdateOrderStatusData(orderNo,5);
Call call = apiService.updateOrderStatus(updateOrderStatusData);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if(response.isSuccessful()){
progressDataList.remove(position);
recyclerView.getAdapter().notifyItemRemoved(position);
Toast.makeText(getContext(), "Order Dispatched successfully", Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(getContext(), "Error In dispatching Order", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call call, Throwable t) {
Toast.makeText(getContext(), "Failed to Dispatched the order", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onDispatchedOrder(String orderNo, int position) {
dispatchedOrder(orderNo,position);
}
}
Где и как я снова вызываю метод fetchData(), чтобы показать обновленные данные.. в recyclerview
Ниже приведен класс адаптера ViewPager2 и класс основного фрагмента, в котором я реализую макет вкладки
Класс, в котором я реализую макет вкладки
public class AllOrderFragment extends Fragment {
public AllOrderFragment() {
// Required empty public constructor
}
View view;
TabLayout tab;
ViewPager2 viewPager2;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_all_order,container,false);
myToolbar();
tab = view.findViewById(R.id.tab);
viewPager2 = view.findViewById(R.id.viewPager2);
viewPager2.setAdapter(new ViewPagerAdapter(getActivity()));
TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(tab, viewPager2, new TabLayoutMediator.TabConfigurationStrategy() {
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
switch (position){
case 0:{
tab.setText("NewOrder");
break;
}
case 1:{
tab.setText("InProgress");
break;
}
case 2:{
tab.setText("Dispatched");
break;
}
case 3:{
tab.setText("Completed");
break;
}
case 4:{
tab.setText("Cancelled");
break;
}
}
}
});
tabLayoutMediator.attach();
return view;
}
public void myToolbar(){
Toolbar toolbar = view.findViewById(R.id.toolbarOrder);
AppCompatActivity activity = (AppCompatActivity) getActivity();
if (activity != null) {
activity.setSupportActionBar(toolbar);
ActionBar actionBar = activity.getSupportActionBar();
if (actionBar != null) {
actionBar.setTitle("Orders");
toolbar.setTitleTextColor(getResources().getColor(android.R.color.white));
}
}
}
}
Класс ViewPagerAdapter
package com.RnDTechnosoft.pizzapizzeria.Adapter;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import com.RnDTechnosoft.pizzapizzeria.fragment.Cancelled;
import com.RnDTechnosoft.pizzapizzeria.fragment.Completed;
import com.RnDTechnosoft.pizzapizzeria.fragment.Dispatched;
import com.RnDTechnosoft.pizzapizzeria.fragment.InProgress;
import com.RnDTechnosoft.pizzapizzeria.fragment.NewOrder;
public class ViewPagerAdapter extends FragmentStateAdapter {
public ViewPagerAdapter(@NonNull FragmentActivity fragmentActivity) {
super(fragmentActivity);
}
@NonNull
@Override
public Fragment createFragment(int position) {
if(position == 0){
return new NewOrder();
}
else if(position == 1) {
return new InProgress();
}
else if(position == 2){
return new Dispatched();
}
else if(position == 3){
return new Completed();
}
else { //cancelled
return new Cancelled();
}
}
@Override
public int getItemCount() {
return 5;
}
}
Подробнее здесь: https://stackoverflow.com/questions/769 ... tab-layout
Вызов метода на слайде макета вкладки ⇐ Android
Форум для тех, кто программирует под Android
1762546571
Anonymous
В моем приложении есть активность панели активности. В этом действии есть два нижних меню навигации, у меня проблема с первым именем меню ВСЕГО порядка.
В классе фрагмента заказа ВСЕ есть макет вкладок с адаптером viewpager2, и на каждой вкладке есть фрагмент...
Во фрагменте у меня есть recyclerview и элемент recyclerview, поступающий из API, а в элементе recyclerview есть одна кнопка принятия заказа, при нажатии кнопки элемент должен быть удален из recyclerview..
Код работает нормально до сих пор, теперь я хочу, чтобы удаляемый элемент также немедленно удалялся из списка в другом фрагменте вкладки, который должен обновить recyclerview, чтобы мой удаленный элемент отображался на этой второй вкладке.
Это обрабатывается вызовом API, мне просто нужно снова выполнить весь метод, который я вызываю при запуске активности, потому что обновленные данные не отображаются, пока я снова не вернусь в действие..
public class InProgress extends Fragment implements InProgressAdapter.OrderActionListener {
ArrayList progressDataList;
RecyclerView recyclerView;
public InProgress() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_in_progress, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
recyclerView = view.findViewById(R.id.rvInProgress);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setHasFixedSize(true);
progressDataList = new ArrayList();
fetchData();
}
public void fetchData(){
ApiService apiService = getRetrofitInstance().create(ApiService.class);
Call call = apiService.getPendingOrder();
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()){
progressDataList.addAll(response.body());
InProgressAdapter inProgressAdapter = new InProgressAdapter(getContext(),progressDataList, InProgress.this);
recyclerView.setAdapter(inProgressAdapter);
}
else{
Toast.makeText(getContext(), "Error..", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call call, Throwable t) {
Toast.makeText(getContext(), "Failed..", Toast.LENGTH_SHORT).show();
}
});
}
public void dispatchedOrder(String orderNo, int position){
ApiService apiService = getRetrofitInstance().create(ApiService.class);
UpdateOrderStatusData updateOrderStatusData = new UpdateOrderStatusData(orderNo,5);
Call call = apiService.updateOrderStatus(updateOrderStatusData);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if(response.isSuccessful()){
progressDataList.remove(position);
recyclerView.getAdapter().notifyItemRemoved(position);
Toast.makeText(getContext(), "Order Dispatched successfully", Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(getContext(), "Error In dispatching Order", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call call, Throwable t) {
Toast.makeText(getContext(), "Failed to Dispatched the order", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onDispatchedOrder(String orderNo, int position) {
dispatchedOrder(orderNo,position);
}
}
Где и как я снова вызываю метод fetchData(), чтобы показать обновленные данные.. в recyclerview
Ниже приведен класс адаптера ViewPager2 и класс основного фрагмента, в котором я реализую макет вкладки
Класс, в котором я реализую макет вкладки
public class AllOrderFragment extends Fragment {
public AllOrderFragment() {
// Required empty public constructor
}
View view;
TabLayout tab;
ViewPager2 viewPager2;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_all_order,container,false);
myToolbar();
tab = view.findViewById(R.id.tab);
viewPager2 = view.findViewById(R.id.viewPager2);
viewPager2.setAdapter(new ViewPagerAdapter(getActivity()));
TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(tab, viewPager2, new TabLayoutMediator.TabConfigurationStrategy() {
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
switch (position){
case 0:{
tab.setText("NewOrder");
break;
}
case 1:{
tab.setText("InProgress");
break;
}
case 2:{
tab.setText("Dispatched");
break;
}
case 3:{
tab.setText("Completed");
break;
}
case 4:{
tab.setText("Cancelled");
break;
}
}
}
});
tabLayoutMediator.attach();
return view;
}
public void myToolbar(){
Toolbar toolbar = view.findViewById(R.id.toolbarOrder);
AppCompatActivity activity = (AppCompatActivity) getActivity();
if (activity != null) {
activity.setSupportActionBar(toolbar);
ActionBar actionBar = activity.getSupportActionBar();
if (actionBar != null) {
actionBar.setTitle("Orders");
toolbar.setTitleTextColor(getResources().getColor(android.R.color.white));
}
}
}
}
Класс ViewPagerAdapter
package com.RnDTechnosoft.pizzapizzeria.Adapter;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import com.RnDTechnosoft.pizzapizzeria.fragment.Cancelled;
import com.RnDTechnosoft.pizzapizzeria.fragment.Completed;
import com.RnDTechnosoft.pizzapizzeria.fragment.Dispatched;
import com.RnDTechnosoft.pizzapizzeria.fragment.InProgress;
import com.RnDTechnosoft.pizzapizzeria.fragment.NewOrder;
public class ViewPagerAdapter extends FragmentStateAdapter {
public ViewPagerAdapter(@NonNull FragmentActivity fragmentActivity) {
super(fragmentActivity);
}
@NonNull
@Override
public Fragment createFragment(int position) {
if(position == 0){
return new NewOrder();
}
else if(position == 1) {
return new InProgress();
}
else if(position == 2){
return new Dispatched();
}
else if(position == 3){
return new Completed();
}
else { //cancelled
return new Cancelled();
}
}
@Override
public int getItemCount() {
return 5;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/76982880/call-the-method-on-slide-of-tab-layout[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия