用于twitter结构的setListAdapter

时间:2016-03-15 02:32:46

标签: android-studio android-adapter twitter-fabric twitter-timeline

我正在尝试使用Twitter时间线和Android工作室制作应用程序。为此,我使用的是twitter fabric API。我关注的文档可在https://docs.fabric.io/android/twitter/show-timelines.html#timeline-builders找到。我遇到的问题是 setListAdapter setListAdapter(adapter); 会出现错误,提示"无法解析方法' setListAdapter(com.twitter.sdk.tweetui.TweetTimelineListAdapter)'" 。我真的没有使用android studio的经验,所以我已经复制并粘贴了大部分代码。我已经查看了适配器在Android工作室中的工作方式,我得到了他们的工作,但我不确定他们是如何设置的。在此先感谢您的帮助!

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.widget.SwipeRefreshLayout;
import com.twitter.sdk.android.core.Callback;
import com.twitter.sdk.android.core.Result;
import com.twitter.sdk.android.core.TwitterException;
import com.twitter.sdk.android.core.models.Tweet;
import com.twitter.sdk.android.tweetui.SearchTimeline;
import com.twitter.sdk.android.tweetui.TimelineResult;
import com.twitter.sdk.android.tweetui.TweetTimelineListAdapter;
import com.twitter.sdk.android.tweetui.UserTimeline;
import com.twitter.sdk.android.tweetui.CollectionTimeline;


public class FeedActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_feed);

        final SwipeRefreshLayout swipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_layout);
        final SearchTimeline timeline = new SearchTimeline.Builder()
                .query("#fblaoutfit")
                .build();
        final TweetTimelineListAdapter adapter = new TweetTimelineListAdapter.Builder(this)
                .setTimeline(timeline)
                .build();
        setListAdapter(adapter);

        swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                swipeLayout.setRefreshing(true);
                adapter.refresh(new Callback<TimelineResult<Tweet>>() {
                    @Override
                    public void success(Result<TimelineResult<Tweet>> result) {
                        swipeLayout.setRefreshing(false);
                    }

                    @Override
                    public void failure(TwitterException exception) {
                        // Toast or some other action
                    }
                });
            }
        });
    }

这里是XML,如果它对你有帮助的话:

<android.support.v4.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipe_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView android:id="@id/android:empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_horizontal|center_vertical"
        android:text="No Tweets"/>

    <ListView android:id="@id/android:list"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:divider="#e1e8ed"
        android:dividerHeight="1dp"
        android:drawSelectorOnTop="false"/>

</android.support.v4.widget.SwipeRefreshLayout>

1 个答案:

答案 0 :(得分:1)

您需要在android中使用ListViewsListActivities进行更多研究。

错误原因

您的烦恼方法setListAdapter(adapter)位于ListActivity,但您的活动类别为AppCompatActivitysetListAdapter(adapter)中没有定义AppCompatActivity方法。这就是你得到上述错误的原因。

解决方案

通过考虑其余的实施,您可以使用AppCompactActivity。但是,您无法使用setListAdapter(adapter)方法。相反,您需要在布局中引用ListView,并为ListView设置适配器,如下面的代码段所示。

public class FeedActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_feed);

        final TweetTimelineListAdapter adapter = new TweetTimelineListAdapter.Builder(this)
            .setTimeline(timeline)
            .build();

        //obtain reference to the list view
        ListView listView = (ListView) findViewById(R.id.listView);

        //set the adapter to list view
        listView.setAdapter(adapter);

        //your rest of the code
    }
}

同样在布局文件中更改ListView的id,如下所示。

<ListView android:id="@+id/listView"...