フラグメントからonClickイベントを含むアクティビティのボタンにデータを渡す通信を実装するインターフェイスを使用したいと思います。 HashMapがeditTextフィールドで有効なデータを書き込むことができますが、その値をアクティビティに送ることはできません。アクティビティのonClickイベントをトリガーすると、エラーを表示して停止します。インターフェイスからフラグメントへのHashMap値の取得
私はインターフェイスの使い方を混乱させました。デバッギングを試した後、以下のようなエラーが表示され、処理に3日ほどかかることがありますが、それでも解決できません。誰もそれを解決する方法をお勧めするか、議論することができます、ありがとう。
エラー:
Error:(77, 5) error: method does not override or implement a method from a supertype
Error:(39, 8) error: Fragment_step_2 is not abstract and does not override abstract method onPassValueStep2() in onPassValue2
Error:(231, 32) error: method onPassValueStep1 in class Fragment_step_1 cannot be applied to given types;
required: HashMap
found: no arguments
reason: actual and formal argument lists differ in length
Error:(232, 32) error: method onPassValueStep2 in class Fragment_step_2 cannot be applied to given types;
required: HashMap
found: no arguments
reason: actual and formal argument lists differ in length
Error:(78, 5) error: method does not override or implement a method from a supertype
Error:(36, 8) error: Fragment_step_1 is not abstract and does not override abstract method onPassValueStep1() in onPassValue
主な活動:
public interface onPassValue{
Map<Object, String> onPassValueStep1();
}
public interface onPassValue2{
Map<Object, String> onPassValueStep2();
}
protected void onCreate(Bundle savedInstanceState) {
......
btn_sendInsureInfo.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
//CALL here
//Fragment_step_1.onPassValueStep1();
//Fragment_step_2.onPassValueStep2();
......
}
}
......
Fragment_step_1:
public class Fragment_step_1 extends Fragment implements xxx.onPassValue {
......
HashMap 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");
}*/
}
@Override
public Map<Object, String> onPassValueStep1(HashMap insureResult) {
for (Object key : insureResult.entrySet()) {
//System.out.println(key + " fragment_1 : " + insureResult.get(key));
System.out.println(" fragment_1 : " + key);
Log.e("Hashmap", String.valueOf(insureResult));
}
return insureResult;
}
......
Fragment_s(xxxはアクティビティの名前です) tep_2:(xxxはアクティビティの名前です)
public class Fragment_step_2 extends Fragment implements xxx.onPassValue2{
......
RelativeLayout correspondence;
HashMap insureApplicant2 = new HashMap<>(3);
@Override
public void onAttach(Context pingan_insure_info){
super.onAttach(pingan_insure_info);
/*try {
passValueStep2 = (onPassValueStep2) xxx;
} catch (ClassCastException e) {
throw new ClassCastException(xxx.toString()
+ " didn't implement onPassValue");
}*/
}
@Override
public Map<Object, String> onPassValueStep2(HashMap insureApplicantStep2){
for (Object key : insureApplicantStep2.entrySet()) {
System.out.println("fragment_2 : " + key);
Log.e("Hashmap2", String.valueOf(insureApplicantStep2));
}
return insureApplicant2;
}
すべての断片EDITTEXTはEDITTEXTが有効と入力された後、ユーザーが充填され、関数に送信し、HashMapの中に保存されます。例えば
:(TextWatcherとAddTextChangedListener)あなたのインターフェイスのメソッドのFragment
で
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);
}
}
}
});
}
});
おかげで方法を変更することができます。私はここで不注意なミスをしました。 : ')そして、どのようにボタンのクリックでそれらのHashMap値を呼び出すことができますか? @BlackbeltアクティビティでHashMapを宣言し、getHashMapStep1.onPassValueStep1(insureApplicant)をアクティビティonClickイベントで呼び出しますか? –
インターフェイスを変更する必要があります。例えば、 'Map
アクティビティのインタフェースのインスタンスのみを変更しますか?ありがとうございました。 –