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



我正在为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(fragment)

    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);
    }

问题似乎是您试图将通用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的经验,我也会尽力提供帮助。

我还没有使用SearchTimelineTweetTimelineListAdapter,但如果它像加载单个推文一样,你需要确保Fabric框架已经用你的时间线所需的推特工具包初始化。在尝试使用SearchTimelineTweetTimelineListAdapter之前,应该发生以下情况:

final TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
Fabric fabric = Fabric.with(context, new Twitter(authConfig));

以上内容将使用来宾身份验证初始化Fabric Twitter。如果你需要访问用户的时间线(而不是公共消防水管),那么你需要包括用户身份验证-请参阅Fabric文档。

编辑2

在您发表评论后,我再次查看了您的代码,您的<ListView>FragmentTimeline.xml中的id可能命名错误。来自文档(强调我的):

ListFragment有一个由单个列表视图组成的默认布局。但是,如果您愿意,您可以通过以下方式自定义片段布局从onCreateView返回您自己的视图层次结构(Layout充气器,ViewGroup、Bundle)要执行此操作,视图层次结构必须包含id为"@android:id/list"ListView对象(如果在代码)

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

相关内容

最新更新