Вызов метода на слайде макета вкладкиAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Вызов метода на слайде макета вкладки

Сообщение 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;
}
}


Подробнее здесь: https://stackoverflow.com/questions/769 ... tab-layout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»