2015-06-22 68 views
0

我需要做這樣的事情。假設我有2個片段A和B.在片段A中有一個可點擊的文本,當用戶單擊此文本時,他可以轉到片段B. This示例幫助我做到了這一點,但我認爲它不適用於片段。所以請告訴我一種方法來解決這個問題。Android設置可點擊的文本去一個片段到另一個片段

public class myClaimsFragment extends Fragment { 

    TextView requestNewClaim; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View newClaimRequest = inflater.inflate(R.layout.activity_my_claims, container, false); 


     SpannableString ss = new SpannableString("Request"); 
     ClickableSpan clickableSpan = new ClickableSpan() { 
      @Override 
      public void onClick(View textView) { 
       Intent intent = new Intent(getActivity(),LoginActivity.class); 
       startActivity(intent); 
      } 
     }; 
     ss.setSpan(clickableSpan , 0,ss.length() , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
     requestNewClaim =(TextView) newClaimRequest.findViewById(R.id.requestHere); 
     requestNewClaim.setText(ss.toString()); 
     requestNewClaim.setMovementMethod(LinkMovementMethod.getInstance()); 

     return newClaimRequest; 
    } 

} 

佈局XML

 <LinearLayout 
      android:id="@+id/view2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:orientation="vertical"> 



      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:id="@+id/requestHere" 
       android:clickable="true" 
       android:textSize="20dp" 
       android:textStyle="bold" 
       android:textColor="#000000" 
       android:layout_marginLeft="20dp" 
       android:layout_alignParentRight="true" 
       android:layout_alignParentEnd="true"/> 

     </LinearLayout> 
+0

你可以使用'textview.setOnClickListener()'來做你想做的事情。 – Pankaj

+0

我試過了,但沒有奏效。 – Tangle

回答

2

如果LoginActivity是片段類,那麼如果你在TextView的使用setOnClickListener它會好起來的。但是,對於片段改變你必須改變意向fragmentTransaction,

使用類似,

textview.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
        getFragmentManager().beginTransaction().replace(R.id.container, new LoginActivity()).addToBackStack("").commit(); 
}); 

但是,如果你想使用SpannableString然後做這樣的,

ClickableSpan clickableSpan = new ClickableSpan() { 
     @Override 
     public void onClick(View textView) { 
      getFragmentManager().beginTransaction().replace(R.id.container, new LoginActivity()).addToBackStack("").commit(); 
     } 
    }; 

這裏,R .id.container是您的主要活動佈局的片段,其中新視圖將被替換。

+0

你能告訴我,我在哪裏做了其他的錯誤嗎?我把這段代碼放在onClick()方法中。但沒有任何事情發生。我運行這段代碼並點擊文本,但沒有發生任何事情。 – Tangle

+0

顯示任何錯誤? – Exigente05

+0

不,但沒有發生。它給人的感覺就像我點擊正常的textView.Can你可以告訴我,我正確地設置TextView爲可點擊嗎?:( – Tangle

1

無法通過Intent調用片段。你需要用新的替換你的當前片段。

+0

_「你不能通過意圖調用片段...」_我沒有看到任何通過「Intent」調用片段。 OP代碼中唯一的'Intent'是用於啓動另一個活動,它很好。 –

1

你有你的片段A更換到B,使用此代碼

FragmentManager fm = getActivity.getSupportFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
Fragment fragment = new FragmentB(); 
ft.replace(R.id.activity_main_content_fragment,fragment); 
ft.commit(); 

在此代碼替換R.id.youframelayoutid,則可行

如果它的代碼有用的,請註明了我回答。 :)

+0

你能告訴我,我在哪裏做了任何其他的錯誤?我把這個代碼放在onClick()方法中。但沒有任何事情發生。我運行這段代碼並點擊文本,但沒有發生任何事情。 – Tangle

+0

@Tangle: - 在你的代碼中,請在這裏找到請求的ID,然後點擊功能實現器,我希望它有幫助。 –

1

作爲一種常用的方式,您應該將FrameLayout放入活動的佈局XML文件中。這個FrameLayout就像你的碎片的佔位符。換句話說,片段A可以粘貼在那裏,片段B也可以粘貼。

好的,假設您已在您活動的佈局文件中添加了FrameLayout。在其上粘貼碎片並替換碎片應該由FragmentManager完成。因此,您應該在活動課中獲取對FragmentManger的引用。爲了得到這個工作...

  • 如果你使用Android支持庫,你應該得到的getSupportFragmentManager()

  • 否則FragmentManger參考,getFragmentManager()

在Android中添加的片段和也以交易的形式替換它們。因此,您應該通知片段管理員您想要進行交易。這可以通過以下方式完成:

FragmentTransaction transaction = fragmentManger.beginTransaction(); 

現在,您可以在此事務對象上應用所有您想要的。通過調用

transaction.commit(); 

transaction.add(R.id.placeholder, new FragmentA() , "tag-frag-A"); 

對於更換...

transaction.replace(R.id.placeholder, new FragmentB(), "tag-frag-B"); 

大功告成後,您提交該事務:例如,添加一個片段可以做這樣的

備註:

  • FragmentManager的作用類似於您添加片段的容器。您可以通過標籤搜索您添加的片段。

  • 設備旋轉不會刪除FragmentManager中添加的片段。因此,在您的onCreate方法中,請注意您只添加了一次碎片。

  • 您可以將交易添加到後退堆棧。這意味着只要用戶點擊Android後退按鈕,這個片段就會從狀態堆棧中移除,並且會被回滾。

+0

你能告訴我,我在哪裏做了任何其他的錯誤嗎?我把這個代碼放在onClick()方法中。但沒有任何事情發生。我運行這段代碼並點擊文本,但沒有發生任何事情。 – Tangle

相關問題