Вызов метода из макета xml с помощью DialogFragment.. как это работает?

Допустим, у меня есть эта кнопка:

<Button
android:id="@+id/idone"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="D2"
android:onClick="myMeth"/>

Я несколько раз использовал это для вызова методов из макета xml, поскольку он вызывает метод из действия, которое раздувает такое представление.

В последнее время с DialogFragments ну вообще не работает. Я продолжаю получать сообщение об ошибке, говорящее мне, что такого метода не существует. Где он тогда ищет такой метод? Я добавил его в класс DialogFragment:

public class myActivity extends DialogFragment {

public DiceDialog() {
    // empty constructor
}

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.myDialog, container);
        getDialog().setTitle("Hello");
        return view;
    }

public void myMeth(View view) {
//...
    }

А также в действии, которое создает экземпляр FragmentManager и вызывает диалог:

public Class MainActiviry Extends  FragmentActivity {

//...
public void onCreate(Bundle savedInstanceState) {
// ..
FragmentManager fm = getSupportFragmentManager();
MyActivity dialog = new AddDiceDialog();
dialog.show(fm, "tag");
}

public void myMeth(View view){
//...
}

И все равно мессаг в том, что MyMeth не найден.

Я уже прочитал, что использование интерфейсов и прослушивателей – правильный способ общения между фрагменты активности и диалога, но то, что я пытаюсь выяснить здесь, это то, где делается этот вызов myMeth, потому что он вызывается.


person quinestor    schedule 10.09.2012    source источник
comment
XML по-прежнему раздувается вашей активностью. И я предполагаю, что компоновщик будет искать тот метод, в котором он был надут, Activity.   -  person mehmetminanc    schedule 10.09.2012


Ответы (1)


Вы можете реализовать public myMeth(View view) в своем Activity, который затем проверит видимый в данный момент Fragment и вызовет его метод.

Если вы хотите использовать более одного вызываемого метода в своем Fragment, вы можете использовать идентификаторы вызывающих представлений и реализовать switch, вызывая другой метод фрагмента в соответствии с идентификатором View.

person marmor    schedule 10.09.2012
comment
Вы имеете в виду, что MyMeth будет искаться в действии? Потому что я добавил его, и он все еще не находит его - person quinestor; 11.09.2012
comment
да, myMeth будет вызываться в действии, но вы должны определить его как таковое: public void myMeth(View view) - person marmor; 11.09.2012
comment
Я все еще получаю то же сообщение об ошибке, вы пробовали это сами? Я отредактировал свой вопрос сейчас - person quinestor; 11.09.2012
comment
обратите внимание на то, что я сказал ранее, вы должны определить его как public void myMeth(View view), а не как public myMeth() - person marmor; 11.09.2012