2014-05-11 21 views
0

我是新來的android和我有這個問題使用靈活的片段。 我有一個名爲mainActivity和Fragment的活動,名爲RegisteractivityFragment。onclicked靈活的片段按鈕不起作用

我在主要活動中加載片段,但是當我點擊應用程序關閉的片段按鈕時。 這是我registerActivityFragment.java的某些部分

public class RegisterActivityFragment extends Fragment { 


public interface OnButtonsClicked { 

    public void onRegisterClicked(); 
    public void onNextTimeclicked(); 
} 
OnButtonsClicked buttonClickListener ; 

    //some codes 

    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     // This makes sure that the container activity has implemented 
     // the callback interface. If not, it throws an exception. 
     try { 
      buttonClickListener = (OnButtonsClicked) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement OnButtonsClicked Functions"); 
     } 
    } 


public void clickRegister(View view) 
{ 


    buttonClickListener.onRegisterClicked(); 
} 
public void clickNextTime(View view) 
{ 

buttonClickListener.onNextTimeclicked(); 
} 



} 

,這是我MainActivity.java

public class MainActivity extends ActionBarActivity implements RegisterActivityFragment.OnButtonsClicked { 

RegisterActivityFragment registerFragment= new RegisterActivityFragment(); 
@Override 
public void onCreate(Bundle savedInstanceState){ 

    //adding Fragment to activity 



} 

    //implementing the interface 
@Override 
public void onRegisterClicked() { 
    // TODO Auto-generated method stub 
    Toast toast = Toast.makeText(MainActivity.this,"asd",Toast.LENGTH_LONG); 
    toast.setGravity(Gravity.CENTER,0,0); 
    toast.show(); 
} 

@Override 
public void onNextTimeclicked() { 

    Toast toast = Toast.makeText(MainActivity.this,"asd",Toast.LENGTH_LONG); 
    toast.setGravity(Gravity.CENTER,0,0); 
    toast.show(); 

} 

}

回答

0

你必須覆蓋onCreateView在RegisterActivityFragment類的方法來設置onClickListner這樣

private Button foo; // as globle var 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) { 
View view = inflater.inflate(R.layout.fragment_rssitem_detail, 
    container, false); 
foo = view.findViewByid(R.id.foo); // button id 
foo.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) 
    { 
     OnButtonsClicked.onRegisterClicked(); 
    } 
}); 
return view; 
} 

你的問題是在XML文件中設置的屬性在片段 其實你產生OnClick =「clickRegister」和定義方法以在MainActivity定義它不是片段

來解決這個問題,以便第二個方法是移動2方法MainActivity那些:

public void clickRegister(View view) 
{ 


    buttonClickListener.onRegisterClicked(); 
} 
public void clickNextTime(View view) 
{ 

buttonClickListener.onNextTimeclicked(); 
} 



} 
+0

實際上第二種方式解決問題,但不應用封裝的面向對象的特性 – NoXSaeeD

+0

毫米...但第一種方式是更好的 – NoXSaeeD

+0

都工作TNX – K1A