Фильтр по временной шкале в Android Studio - PullRequest
0 голосов
/ 06 июля 2019

Я создаю временную шкалу Твиттера в Android Studio, и я хочу установить фильтр, чтобы показывать только твиты, содержащие слово x, но я знаю только, как удалить те из них, которые содержат слово x, и что я хочу, это обратное. Кто-нибудь знает как это сделать?

Я оставляю код, который я написал, для создания временной шкалы пользователя Twitter.

Привет и спасибо

v2 (редактировать)

У меня следующая проблема; метод "getFilteredListOfTweets" не позволяет мне фильтровать UserTimeLine, а .setTimeLine () не может быть "TimeLineResult".

public class UserTimelineFragment extends Fragment {

    private Context context;
    private RecyclerView userTimelineRecyclerView;
    private SwipeRefreshLayout swipeRefreshLayout;
    private TweetTimelineRecyclerViewAdapter adapter;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        this.context = context;
    }

    public static UserTimelineFragment newInstance() {

        Bundle args = new Bundle();

        UserTimelineFragment fragment = new UserTimelineFragment();
        fragment.setArguments(args);
        return fragment;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.user_timeline_fragment, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        setUpSwipeRefreshLayout(view);
        setUpRecyclerView(view);
        loadUserTimeline();
    }

    private void setUpRecyclerView(@NonNull View view) {
        userTimelineRecyclerView = view.findViewById(R.id.user_timeline_recycler_view);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
        userTimelineRecyclerView.setLayoutManager(linearLayoutManager);
    }

    private void loadUserTimeline() {

        UserTimeline userTimeline = new UserTimeline.Builder()
                .screenName("playfulbet")
                .includeReplies(false)
                .includeRetweets(false)
                .maxItemsPerRequest(10)
                .build();

        //now build adapter for recycler view
        TimelineResult<Tweet> filteredTweets = getFilteredListOfTweets(userTimeline);
        adapter = new TweetTimelineRecyclerViewAdapter.Builder(context)
                .setTimeline(filteredTweets)

                //action callback to listen when user like/unlike the tweet
                .setOnActionCallback(new Callback<Tweet>() {
                    @Override
                    public void success(Result<Tweet> result) {
                        //do something on success response
                    }

                    @Override
                    public void failure(TwitterException exception) {
                        //do something on failure response
                    }
                })
                .build();

        userTimelineRecyclerView.setAdapter(adapter);
    }

    private void setUpSwipeRefreshLayout(View view) {

        swipeRefreshLayout = view.findViewById(R.id.user_swipe_refresh_layout);

        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {

                if (adapter == null)
                    return;

                swipeRefreshLayout.setRefreshing(true);
                adapter.refresh(new Callback<TimelineResult<Tweet>>() {
                    @Override
                    public void success(Result<TimelineResult<Tweet>> result) {
                        TimelineResult<Tweet> filteredTweets = getFilteredListOfTweets(result.data);
                        //on success response make refreshing false
                        swipeRefreshLayout.setRefreshing(false);
                        Toast.makeText(context, "Tweets actualizados.", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void failure(TwitterException exception) {
                        // Toast or some other action
                        Toast.makeText(context, "Error al actualizar los tweets.", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        });
    }

    private static TimelineResult<Tweet> getFilteredListOfTweets(TimelineResult<Tweet> timelineResult){

        TimelineResult<Tweet> filteredTweets = new TimelineResult<>(null, Collections.<Tweet>emptyList());

        for (int i=0;i<timelineResult.items.size();i++){
            if (timelineResult.items.get(i).source.contains("cupón")){
                filteredTweets.items.add(timelineResult.items.get(i));
            }
        }

        return filteredTweets;
    }
}

1 Ответ

0 голосов
/ 07 июля 2019

Вот что вам нужно сделать в качестве шагов: 1. Получить список твитов 2. Фильтровать список, проверяя, содержит ли твит x слов 3. Использовать отфильтрованный список результатов

, поэтому в этой части я добавил методчтобы получить требуемый список твитов на основе x-слова

           `adapter.refresh(new Callback<TimelineResult<Tweet>>() {
                @Override
                public void success(Result<TimelineResult<Tweet>> result) {
                    TimelineResult<Tweet> filteredTweets = getFilteredListOfTweets(result.body(),"WordToFilterWith");
                    //on success response make refreshing false
                    swipeRefreshLayout.setRefreshing(false);
                    Toast.makeText(context, "Tweets actualizados.", Toast.LENGTH_SHORT).show();
                }`

и метода getFilteredListOfTweets:

public static TimelineResult<Tweet> getFilteredListOfTweets(TimelineResult<Tweet> timelineResult,String wordToFilter){


        TimelineResult<Tweet> filteredTweets = new TimeLineResult<Tweet>();

        for (int i=0;i<timelineResult.size();i++){
                 if (timelineResult.get(i).getText().contains(text)){
                   filteredTweets.add(timelineResult.get(i));
                 }
        }

      return filteredTweets;
 }
...