0

我正在爲android和Im製作twitter客戶端,並且很難將時間線(結構)的列表片段添加到我的活動中。起初它會崩潰我的應用程序,但現在我做了一些改變,它不會崩潰,但一旦推特驗證,它加載的活動,但顯示一個空白的屏幕。下面是我的代碼...任何幫助將不勝感激。提前致謝。如何添加我的twitter結構時間表ListFragment到我在Android Studio中的活動

活動

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(activty佈局)

<?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

它看起來像問題是,你正試圖通用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 - 面料諮詢

我知道你可能會在該解決方案通過實驗試圖讓面料已經到達上班的話,因爲我有面料的經驗,我我也會盡力幫助你。

我還沒有使用SearchTimelineTweetTimelineListAdapter,但是如果它像加載單獨的tweets一樣,則需要確保Fabric框架已使用所需的Twitter工具包爲您的時間線進行了初始化。像下面的內容嘗試使用SearchTimelineTweetTimelineListAdapter之前應該發生:

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

以上將初始化面料的Twitter與來賓身份驗證。如果您需要訪問用戶的時間表(而不是公共消息),那麼您需要包含用戶身份驗證 - 請參閱Fabric docs

編輯2

your comment,我在你的代碼又看了看,它看起來像你的<ListView>FragmentTimeline.xml的也許ID可能會錯誤地命名。從docs(重點是我的):

ListFragment具有默認佈局,它由單個列表視圖組成。 但是,如果您願意,可以通過 從onCreateView(LayoutInflater, ViewGroup,Bundle)返回您自己的視圖層次結構來自定義片段佈局。 要做到這一點,您的視圖層次結構中必須包含id爲「@android:id/list"(或列表,如果它在 代碼)

ListFragment佈局XML一個 ListView對象,你的ListView被命名爲@id/android:list,而不是@android:id/list

+0

我修改了代碼,但它仍然在做同樣的事情,我已經有了twitter身份驗證的工作,只是在它進行身份驗證之後,它會加載一個空的屏幕,當我在列表視圖中使用時間線代碼時,我正在嘗試使用t他listfragment,所以我可以在同一屏幕上有多個時間線 – skeete

+0

@skeete我再看看你的代碼,看看它可能是因爲你錯誤地命名了你的'ListView'。請看看上面的**編輯2 **,看看是否有幫助。 – aoemerson

+0

@skeete話雖如此......在文檔中進一步閱讀,他們有一個使用「@ id/android:list」ID的例子!無論如何,值得一試。我會再看看你有什麼可以解決的問題。 – aoemerson

相關問題