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"...