我正在为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的经验,我也会尽力提供帮助。
我还没有使用SearchTimeline
或TweetTimelineListAdapter
,但如果它像加载单个推文一样,你需要确保Fabric框架已经用你的时间线所需的推特工具包初始化。在尝试使用SearchTimeline
或TweetTimelineListAdapter
之前,应该发生以下情况:
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