我正在为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);
}
答案 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();
}
我意识到你可能已经通过实验尝试让Fabric工作到达这个解决方案,因为我有Fabric经验,我也会尝试帮助。
我还没有使用SearchTimeline
或TweetTimelineListAdapter
,但如果它像加载单个推文一样,您需要确保Fabric框架已经使用所需的Twitter初始化您的时间表的工具包。在尝试使用SearchTimeline
或TweetTimelineListAdapter
:
final TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
Fabric fabric = Fabric.with(context, new Twitter(authConfig));
以上将使用访客身份验证初始化Fabric Twitter。如果您需要访问用户的时间线(而不是公共消防队员),那么您需要包含用户身份验证 - 请参阅Fabric docs。
关注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