2015-06-22 71 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

相关问题