【问题标题】:Filter for timeline in Android Studio在 Android Studio 中过滤时间线
【发布时间】:2019-11-16 22:41:16
【问题描述】:

我正在 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;
    }
}

【问题讨论】:

  • 你能添加 TimelineResult 类,用于将数据膨胀到适配器中吗?
  • @HossamEldeenOnsy 是的,我已经将所有代码添加到初始消息中
  • 我在询问 Tweet 类本身,因为您需要做的是过滤,将当前列表放入一个新列表中,该列表将使用我想签入的某个参数进行过滤Tweet 类或您希望的任何参数
  • @HossamEldeenOnsy 我没有更多的课,我使用 twitter api

标签: java android twitter filter timeline


【解决方案1】:

以下是您需要执行的步骤: 1. 获取推文列表 2.通过检查tweet是否包含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;
 }

【讨论】:

  • 非常感谢@HossamEldeenOnsy,但我在 TimelineResult filteredTweets = new TimelineResult();错误是:TimelineResult(TimelineResult(TimelineCursor,List in TimelineResult cannot be applied to ()
  • 我有下一个问题;方法“getFilteredListOfTweets”不允许我过滤UserTimeLine,并且.setTimeLine() 不能是“TimeLineResult”。我用更改编辑第一条消息
猜你喜欢
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多