如何将我的Twitter结构时间线ListFragment添加到Android Studio中的活动中

时间:2015-11-30 23:31:33

标签: android android-fragments twitter android-listfragment twitter-fabric

我正在为Android制作一个Twitter客户端,我很难将时间轴(结构)的列表片段添加到我的活动中。起初它会崩溃我的应用程序,但现在我做了一些更改,它没有崩溃但是一旦twitter验证并加载活动但显示一个空白屏幕。下面是我的代码...任何帮助将不胜感激。提前谢谢。

活动

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;

/**
 * Created by B on 11/24/2015.
 */
public class TweetClass extends Activity {

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

    Fragment frag = new Fragment();
    FragmentManager manager = getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.add(R.id.fragment_timeline_user,frag, "Timeline Fragment");
    transaction.commit();

FragmentTimeline.xml(片段布局)

`

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

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

tweet_layout_multi(活动布局)

<?xml version="1.0" encoding="utf-8"?>
   <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/fragment_timeline_user"
    android:name="com.continuumwear.continuumbrowser.TimelineFragment"
    tools:layout="@layout/fragment_timeline">

</RelativeLayout>

TimelineFragment(片段)

    import android.app.ListFragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.twitter.sdk.android.tweetui.SearchTimeline;
import com.twitter.sdk.android.tweetui.TweetTimelineListAdapter;


public class TimelineFragment extends ListFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final SearchTimeline searchTimeline = new SearchTimeline.Builder()
                .query("#twitterflock")
                .build();
        final TweetTimelineListAdapter adapter = new TweetTimelineListAdapter.Builder(getActivity())
                .setTimeline(searchTimeline)
                .build();
        setListAdapter(adapter);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_timeline, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    }

1 个答案:

答案 0 :(得分:0)

看起来问题是您尝试向您的活动添加通用Fragment而不是TimeLineFragment

而不是:

Fragment frag = new Fragment(); // creates a generic fragment, not your ListFragment

您应该创建一个您定义的TimelineFragment实例,如下所示:

TimeLineFragment frag = new TimeLineFragment();

然后您可以使用上面已经完成的FragmentTransaction添加它。

完整代码:

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

    TimeLineFragment frag = new TimeLineFragment(); // change this line
    FragmentManager manager = getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.add(R.id.fragment_timeline_user,frag, "Timeline Fragment");
    transaction.commit();
}

编辑1 - Fabric建议

我意识到你可能已经通过实验尝试让Fabric工作到达这个解决方案,因为我有Fabric经验,我也会尝试帮助。

我还没有使用SearchTimelineTweetTimelineListAdapter,但如果它像加载单个推文一样,您需要确保Fabric框架已经使用所需的Twitter初始化您的时间表的工具包。在尝试使用SearchTimelineTweetTimelineListAdapter

之前,应执行以下操作
final TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
Fabric fabric = Fabric.with(context, new Twitter(authConfig));

以上将使用访客身份验证初始化Fabric Twitter。如果您需要访问用户的时间线(而不是公共消防队员),那么您需要包含用户身份验证 - 请参阅Fabric docs

编辑2

关注your comment后,我再次查看了您的代码,看起来您的<ListView>内部 FragmentTimeline.xml 的ID可能名称不正确。来自docs(强调我的):

  

ListFragment具有由单个列表视图组成的默认布局。   但是,如果需要,可以通过自定义片段布局   从onCreateView返回您自己的视图层次结构(LayoutInflater,   ViewGroup,Bundle)。 要执行此操作,您的视图层次结构必须包含   标识为&{34; ListView @android:id/list"个对象(如果它在,则为列表   代码)

您的 ListFragment布局xml中,您的ListView名为@id/android:list,而不是@android:id/list