2014-05-11 3 views
0

Я новичок в android, и у меня есть эта проблема с помощью Flexible Fragment. У меня есть действие, называемое mainActivity и Fragment, называемое RegisteractivityFragment.onclicked on Flexible Fragment Buttons не работает

Я загружаю Фрагмент в главную деятельность, но когда я нажимаю кнопки «Фрагменты», приложение закрывается. Это некоторые части моего 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

Смежные вопросы