setListAdapter для твиттерной фабрики

Я пытаюсь сделать приложение с временной шкалой Твиттера андроид-студией. Для этого я использую API твиттер-ткани. Документация, за которой я следую, находится по адресу https://docs.fabric.io/android/twitter/show-timelines.html. У меня проблема в том, что setListAdapter в setListAdapter(адаптер); появляется сообщение об ошибке "Не удается разрешить метод" setListAdapter(com.twitter.sdk.tweetui.TweetTimelineListAdapter)'". У меня действительно нет опыта работы с android studio, поэтому я скопировал и вставил большую часть этого кода. Я посмотрел, как адаптеры работают в Android Studio, и я понимаю, что они делают, но я не уверен, как они настроены. Заранее спасибо за помощь!

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 ответ

Вам нужно больше учиться использовать ListViews а также ListActivities в андроид.

Причина ошибки

Ваш тревожный метод setListAdapter(adapter) доступен в ListActivity но ваш класс активности AppCompatActivity, Здесь нет setListAdapter(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
    }
}

Также измените id вашего ListView в файле макета следующим образом.

<ListView android:id="@+id/listView"...
Другие вопросы по тегам