在Android Studio中过滤时间轴

时间:2019-07-06 20:51:01

标签: java android twitter filter timeline

我正在android studio中创建一个Twitter时间轴,我想放置一个过滤器以仅显示包含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 :(得分:0)

这是您需要执行的步骤:  1.获取推文列表  2.通过检查推文是否包含x个单词来过滤列表  3.使用结果过滤列表

因此,在这一部分中,我添加了一种方法,用于根据x字获取所需的Tweets列表

           `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;
 }