2016-09-15 58 views
1

我有一个活动A在其中我有一个片段。onclick事件在片段活动不起作用

在该活动片段的变化进行分段基于用户输入在活动A. A(默认当活性A被称为)或B片段

在这两个片段A & B I有一个按钮与点击监听。 ,但此按钮仅在活动A启动时第一次工作。

当用户更改片段时,这些片段中的按钮停止响应点击。

请建议我需要什么,以使按钮片段A & B可办时,片段由用户更改。

我更换因此代码基于用户输入的片段:

fr = new FragmentOneDice(); 
FragmentManager fm = getFragmentManager(); 
FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
fragmentTransaction.replace(R.id.fragment_place, fr); 
fragmentTransaction.commit(); 

在片段活动代码是这样的用于在点击监听器按钮。

import android.app.Fragment; 
import android.app.FragmentManager; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.os.Build; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.ImageView; 

import java.util.ArrayList; 
import java.util.Collections; 

public class FragmentOneDice extends Fragment implements View.OnClickListener { 

    Button button1; 
    View view; 

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

     //Inflate the layout for this fragment 


     view = inflater.inflate(R.layout.activity_fragment_one, container, false); 


     button1 = (Button) view.findViewById(R.id.button_one); 
     button1.setOnClickListener(this); 

     return view; 


    } 

    @Override 
    public void onClick(View v) { 
     //MY CODE HERE 
} 
+0

'this'不是有效的OnClickListener,片段中的onClick方法是片段本身的onclick。尝试用'button1.setOnClickListener(new View.OnClickListener()替换'button1.setOnClickListener(this);'''@Override public void onClick(View v){/ * YOUR CODE * /}});' – x13

+0

无效,请你解释一下吗?因为正如我在问题中所说的,onClick在第一次创建活动A并且用户没有尝试更改片段时起作用。 onClick在用户更改片段时停止工作。 –

+0

通过覆盖onClick(),FragmentOneDice实现了View.OnCLickListener,所以它是一个有效的View.OnClickListener。 – 0X0nosugar

回答

1

问题出在我的activity_main.XML中,我已经定义了<Fragment>作为所有片段的占位符,并将默认设置为一个片段。所以当其他片段被加载时,它会变得重叠,导致按钮上的点击事件不起作用,我将<Fragment>更改为<FrameLayout>作为占位符。我的问题解决了。

0

首先,你记住一两件事,
片段片段直接交易,或片段片段直接替换是不可能的。有可能只抛出Activity。

在第一个片段中定义一个接口,并使容器Activity实现该接口,以便您可以将数据从Fragment发送到Activity。另一方面,创建Second Fragment并在其中定义一个接口。在定义第二片段的First Fragment接口的已实现方法内的内容活动中,此处我们通过接口将数据分配给第二片段。

+0

我对java和android很新,我没有从你的答案中理解一件事。 。你能请一些例子来解释一下吗? –

+0

k,当然。很快我会发布我的答案 – ballu