ボタンをクリックしてもAndroidリサイクラービューが更新されない

ファビオピレス:

テキスト、ボタン、およびリサイクラービューを編集しているところに、このフラグメントがあります。初めてボタンをクリックしたときの動作は期待どおりですが、テキストの編集コンテンツを変更してボタンをもう一度クリックしても、リサイクラービューは更新されません。何が悪いのですか?クリックごとにAPI呼び出しを行うプロセスを繰り返すので

断片

public class SearchFragment extends Fragment implements View.OnClickListener {

    private RestaurantAdapter mAdapter;
    private RecyclerView mRecyclerView;
    protected static List<Restaurant_> restaurantsList;
    private Context context;
    private static OnRestaurantClickedListener listener;
    private FirebaseAuth mAuth;

    private EditText keyword;

    private FusedLocationProviderClient mFusedLocationClient;


    public SearchFragment() {
    }

    public static OnRestaurantClickedListener getListener() {
        return listener;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = getContext();
        mAuth = FirebaseAuth.getInstance();
        restaurantsList = new ArrayList<>();
        mAdapter = new RestaurantAdapter(context, restaurantsList, getActivity());
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View mContentView = inflater.inflate(R.layout.fragment_search, container, false);
        mRecyclerView = mContentView.findViewById(R.id.recycler_view);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(mContentView.getContext()));
        mRecyclerView.setAdapter(mAdapter);

        keyword = mContentView.findViewById(R.id.keyword);
        keyword.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
                if ((keyEvent != null && keyEvent.getKeyCode() == KeyEvent.KEYCODE_ENTER) || (actionId == EditorInfo.IME_ACTION_SEARCH))
                    getRestaurants();
                return false;
            }
        });

        ImageButton searchButton = mContentView.findViewById(R.id.search);
        searchButton.setOnClickListener(this);

        return mContentView;
    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            listener = (OnRestaurantClickedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement OnButtonClicked");
        }
    }

    @SuppressLint("MissingPermission")
    private void getRestaurants() {
        mFusedLocationClient = LocationServices.getFusedLocationProviderClient(getActivity());
        mFusedLocationClient.getLastLocation().addOnSuccessListener(getActivity(), new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(final Location location) {
                if (location != null) {
                    SharedPreferences mSettings = PreferenceManager.getDefaultSharedPreferences(context);
                    String sort = mSettings.getString("sort", "rating");
                    String order = mSettings.getString("order", "desc");
                    double radius = Double.parseDouble(mSettings.getString("radius", "10"));
                    radius = radius * 1000;
                    RetrofitZomato.getApi().searchByName(keyword.getText().toString(), location.getLatitude(), location.getLongitude(),
                            20, radius, sort, order, getActivity().getResources().getString(R.string.user_key))
                            .enqueue(new Callback<SearchResponse>() {
                                @Override
                                public void onResponse(Call<SearchResponse> call, Response<SearchResponse> response) {
                                    if (restaurantsList.size() != 0) {
                                        restaurantsList.clear();
                                        mAdapter.notifyDataSetChanged();
                                    }
                                    List<Restaurant> restaurants = response.body().getRestaurants();
                                    for (int i = 0; i < restaurants.size(); i++) {
                                        double distance = calculateDistance(Double.parseDouble(restaurants.get(i).getRestaurant().getLocation().getLatitude()),
                                                Double.parseDouble(restaurants.get(i).getRestaurant().getLocation().getLongitude()),
                                                location.getLatitude(), location.getLongitude());
                                        distance = (double) Math.round(distance * 100d) / 100d;
                                        restaurants.get(i).getRestaurant().setDistance(distance);
                                        restaurantsList.add(restaurants.get(i).getRestaurant());
                                        mAdapter.notifyItemInserted(i);
                                    }
                                }

                                @Override
                                public void onFailure(Call<SearchResponse> call, Throwable t) {
                                    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                                    builder.setMessage("Couldn't find any nearby restaurants");
                                    AlertDialog mDialog = builder.create();
                                    mDialog.show();
                                }
                            });
                }
            }
        }).addOnFailureListener(getActivity(), new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(getActivity(), "It wasn't possible to determine your location", Toast.LENGTH_LONG).show();
            }
        });
    }

    private double calculateDistance(double latRestaurant, double lonRestaurant, double myLat, double myLon) {
        if ((myLat == latRestaurant) && (myLon == lonRestaurant)) {
            return 0;
        } else {
            double theta = myLon - lonRestaurant;
            double dist = Math.sin(Math.toRadians(myLat)) * Math.sin(Math.toRadians(latRestaurant))
                    + Math.cos(Math.toRadians(myLat)) * Math.cos(Math.toRadians(latRestaurant)) * Math.cos(Math.toRadians(theta));
            dist = Math.acos(dist);
            dist = Math.toDegrees(dist);
            dist = dist * 60 * 1.1515;
            dist = dist * 1.609344;
            return dist;
        }
    }

    @Override
    public void onClick(View view) {
        int id = view.getId();
        if (id == R.id.search) {
            getRestaurants();
        }
    }
//    @Override
//    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
//        super.onActivityCreated(savedInstanceState);
//        searchViewModel = ViewModelProviders.of(this).get(SearchViewModel.class);
//        // TODO: Use the ViewModel
//    }

}
snachmsm:

getRestaurantsあなたが呼んでいるすべての呼び出しgetFusedLocationProviderClientaddOnSuccessListener、古いものを登録して残しておくことに注意してください...おそらくリスナーのこれらの複数のインスタンスがこの動作の理由ですか?

この行をに移動 onAttach

mFusedLocationClient = LocationServices.getFusedLocationProviderClient(getActivity());

一度呼ばれたことに対して。次に、SearchFragment実装OnSuccessListenerしてに設定しFusedLocationProviderClientます。あなたのクリックは新しい場所のリクエストを発火するはずです、そしてあなたの現在のコードはgetLastLocationまたで処理されるかもしれませんonAttach

編集:実際の答え-コメントのコピー

mAdapter.notifyItemInserted(i);行の削除を試み、メソッドの終わり(forループの後)mAdapter.notifyDataSetChanged();if状態から抜け出します。私はあなたのコードに疑わしいものは何も見ていません、うまく見えます...

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

グリッドビュー内のボタンをクリックしても、更新パネル内のグリッドビューが更新されない

分類Dev

ブラウザの戻るボタンをクリックしてもデータが更新されない

分類Dev

リサイクラービューのボタンクリックが繰り返されています

分類Dev

ナビゲーションアイテムを変更してもリサイクラービューが更新されない

分類Dev

別のリサイクラービューのボタンをクリックして、リサイクラービューを更新します

分類Dev

送信ボタンをクリックしてもデータが更新されない

分類Dev

外部リサイクラービューのボタンをクリックして、内部グリッドビューを追加したいのですが

分類Dev

リサイクラービューが更新されない

分類Dev

Angularで削除ボタンをクリックしてもページが更新されない

分類Dev

Javascriptラジオボタンをクリックしてもフィールドがコピーされない

分類Dev

ナビゲーションバーボタンをクリックしてもメニューが表示されない

分類Dev

Androidでボタンをクリックしてもロード画面が表示されない

分類Dev

Androidでリストビューアイテムがクリックされたときにリストビューをフィルタリングしても正しい結果が表示されない

分類Dev

リサイクラービューが正しく更新されない

分類Dev

.NETCoreのラジオボタンをクリックしてもフォームが送信されない

分類Dev

ボタンをクリックしてもテキストボックスの値が更新されない

分類Dev

ボタンをクリックしてもデータベースからデータが取得されない

分類Dev

IOS:ビューのzPositionが変更されたときにサブビューボタンクリックイベントが発生しないUIView

分類Dev

空のリサイクラービューが新しいデータで更新されていません

分類Dev

フラッター:: VSCodeを右クリックしても、リファクタリングボタンが表示されない

分類Dev

リサイクラービューがAndroidのパラメータでビッグボレーデータを読み取っていない

分類Dev

Javascriptで次のボタンをクリックしても前のビューが消えない

分類Dev

ラジオボタンの状態がリサイクラービューに保持されていません

分類Dev

キャッシュlaravelをクリアしてもビューが更新されない

分類Dev

クリックしてもブートストラップボタンが強調表示されない

分類Dev

新しいデータが追加されたときにリサイクラービューを更新する

分類Dev

リサイクラー ビューからアイテムを削除しても、リサイクラー ビューは更新されませんか?

分類Dev

ボタンをクリックしてもブートストラップ読み込みアイコンが表示されない

分類Dev

ボタンをクリックしてもダイアログボックスが表示されない

Related 関連記事

  1. 1

    グリッドビュー内のボタンをクリックしても、更新パネル内のグリッドビューが更新されない

  2. 2

    ブラウザの戻るボタンをクリックしてもデータが更新されない

  3. 3

    リサイクラービューのボタンクリックが繰り返されています

  4. 4

    ナビゲーションアイテムを変更してもリサイクラービューが更新されない

  5. 5

    別のリサイクラービューのボタンをクリックして、リサイクラービューを更新します

  6. 6

    送信ボタンをクリックしてもデータが更新されない

  7. 7

    外部リサイクラービューのボタンをクリックして、内部グリッドビューを追加したいのですが

  8. 8

    リサイクラービューが更新されない

  9. 9

    Angularで削除ボタンをクリックしてもページが更新されない

  10. 10

    Javascriptラジオボタンをクリックしてもフィールドがコピーされない

  11. 11

    ナビゲーションバーボタンをクリックしてもメニューが表示されない

  12. 12

    Androidでボタンをクリックしてもロード画面が表示されない

  13. 13

    Androidでリストビューアイテムがクリックされたときにリストビューをフィルタリングしても正しい結果が表示されない

  14. 14

    リサイクラービューが正しく更新されない

  15. 15

    .NETCoreのラジオボタンをクリックしてもフォームが送信されない

  16. 16

    ボタンをクリックしてもテキストボックスの値が更新されない

  17. 17

    ボタンをクリックしてもデータベースからデータが取得されない

  18. 18

    IOS:ビューのzPositionが変更されたときにサブビューボタンクリックイベントが発生しないUIView

  19. 19

    空のリサイクラービューが新しいデータで更新されていません

  20. 20

    フラッター:: VSCodeを右クリックしても、リファクタリングボタンが表示されない

  21. 21

    リサイクラービューがAndroidのパラメータでビッグボレーデータを読み取っていない

  22. 22

    Javascriptで次のボタンをクリックしても前のビューが消えない

  23. 23

    ラジオボタンの状態がリサイクラービューに保持されていません

  24. 24

    キャッシュlaravelをクリアしてもビューが更新されない

  25. 25

    クリックしてもブートストラップボタンが強調表示されない

  26. 26

    新しいデータが追加されたときにリサイクラービューを更新する

  27. 27

    リサイクラー ビューからアイテムを削除しても、リサイクラー ビューは更新されませんか?

  28. 28

    ボタンをクリックしてもブートストラップ読み込みアイコンが表示されない

  29. 29

    ボタンをクリックしてもダイアログボックスが表示されない

ホットタグ

アーカイブ