Arhn - архитектура программирования

Использование интерфейса для вызова значений из фрагмента в действие, вызванное ClassCastException

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

Процедуры:

  1. Пользователи заполнили поле editText
  2. Как только поле editText будет сфокусировано, TextWatcher с проверкой проверит (если недействительно, editText не будет помещен в HashMap и предложит пользователю отредактировать, если пользователь нажмет кнопку отправки, он сначала повторно нагреет пользователя, изменив правильный ответ)

  3. Когда пользователь заполнит все поля и нажмет кнопку, значения фрагментов вернутся в виде Hashmap, и проверка на наличие пустых полей или нет, а также взорвать значения и putExtra() для следующего действия.

Я был сбит с толку использованием интерфейса, хотя я прочитал много источников и случаев во время устранения этой проблемы. Или могу ли я использовать другое решение для реализации этой функции?

Спасибо за любую помощь.

Вызов карты фрагментов к действию

Основная деятельность:

......
Fragment_step_1 getHashMapStep1 = new Fragment_step_1();
Fragment_step_2 getHashMapStep2 = new Fragment_step_2();

public interface onPassValue{
    public Map<Object, String> onPassValueStep1(Map<Object, String> insureApplicant);
}

public interface onPassValue2{
    Map<Object, String> onPassValueStep2(Map<Object, String> insureApplicant2);
}

protected void onCreate(Bundle savedInstanceState) {
    ......
    btn_sendInsureInfo.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view){

            Fragment_step_1.onPassValueStep1();
            Fragment_step_2.onPassValueStep2();
            //NullPointerException on those two calling interface method
            ......
        }
}
......

Fragment_step_1: (xxx — название активности)

public class Fragment_step_1 extends Fragment implements xxx.onPassValue {
    ......
     Map<Object, String> insureApplicant = new HashMap<>(4);

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public void onAttach(Context xxx){
    super.onAttach(xxx);

    try {
       passValue = (onPassValue) xxx;
    } catch (ClassCastException e) {
        throw new ClassCastException(pingan_insure_info.toString()
                + " didn't implement onPassValue");
    }
    //THROW EXCEPTION ALWAYS
}

@Override
public Map<Object, String> onPassValueStep1(Map<Object, String> insureResult) {
    for (Object key : insureResult.entrySet()) {
        //System.out.println(key + " fragment_1 : " + insureResult.get(key));
        System.out.println(" fragment_1 : " + key);
        Log.e("map", String.valueOf(insureResult));
    }
    return insureResult;
}
    ......

Fragment_step_2: (xxx — название активности)

public class Fragment_step_2 extends Fragment implements xxx.onPassValue2{
......
RelativeLayout correspondence;
HashMap insureApplicant2 = new HashMap<>(3);

@Override
public void onAttach(Context xxx){
    super.onAttach(xxx);

    try {
        passValueStep2 = (onPassValueStep2) xxx;
    } catch (ClassCastException e) {
        throw new ClassCastException(xxx.toString()
                + " didn't implement onPassValue");
    }
    //THROW EXCEPTION ALWAYS
}

@Override
public Map<Object, String> onPassValueStep2(Map<Object, String> insureApplicantStep2){
    for (Object key : insureApplicantStep2.entrySet()) {
        System.out.println("fragment_2 : " + key);
        Log.e("Hashmap2", String.valueOf(insureApplicantStep2));
    }
    return insureApplicant2;
}

Текст редактирования всех фрагментов будет заполнен после того, как текст редактирования будет действителен и введен пользователем, отправлен в функцию и сохранен в HashMap.

Например: (AddTextChangedListener с TextWatcher)

residentAddress.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}

        @Override
        public void afterTextChanged(Editable editable) {
            residentAddress.setOnFocusChangeListener(new View.OnFocusChangeListener(){
                @Override
                public void onFocusChange(View view, boolean isFocus){
                    if(!isFocus){
                        if("".trim().equals(residentAddress.getText().toString())){
                            rAddress.setError("Resident Address is required.");
                            strAddress = "";
                            insureApplicant2.put(2, strAddress);
                        } else {
                            rAddress.setErrorEnabled(false);
                            rAddress.setError(null);
                            strAddress = residentAddress.getText().toString().trim();
                            insureApplicant2.put(2, strAddress);

                            onPassValueStep2(insureApplicant2);
                            //CAN PUT THE VALUE TO HASHMAP BUT CANNOT be RETURNED TO ACTIVITY :(
                        }
                    }
                }
            });

        }
    });

Ответы:


1

Чтобы передать значения из фрагмента в действие, создайте интерфейс во фрагменте. Не в действии.

Фрагмент А

public class FragmentA extends Fragment {

    public interface InterfaceTest{
        void passValue(String passval);
    }

    InterfaceTest interfaceTest;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);


        interfaceTest= (InterfaceTest) context;


    }

    public FragmentA() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView= inflater.inflate(R.layout.fragment_, container, false);



        return  rootView;

    }
//
    public void passToActivity(){
        interfaceTest.passValue("yourvalues");
    }

}

МЕРОПРИЯТИЯ

public class MainActivity extends AppCompatActivity implements FragmentA.InterfaceTest {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //create code for add fragment in activity


    }

    @Override
    public void passValue(String passval) {
        Log.e("print",passval);
    }
}
17.10.2016
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..