0

Ich wollte Daten von Aktivität zu derzeit geladenen Fragment auf Knopfdruck übergeben. Dafür habe ich Interface erstellt und in Aktivität definiert und in Schnittstelle implementieren, konnte jedoch keine Antwort in Fragment erhalten.Schnittstelle nicht von Aktivität zu aktuell geladenen Fragment

I Die Ausgabe wurde immer dann benötigt, wenn die Schaltfläche "Klicken" in der Aktivität "Aktiviert" angeklickt wird.

Hier ist mein Code. Bitte helfen Sie mir, dies zu lösen.

Inteface

public interface Click { 
    void onClick(String msg); 
} 

Haupt actvity

public class MainActivity extends FragmentActivity { 
    DrawerLayout dlMain; 
    Button btnClick; 

    Click click; 

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


     FragmentOne fragmentOne = new FragmentOne(); 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(R.id.flContainer, fragmentOne,"FragmentOne"); 
     ft.commit(); 

     click = (Click) getSupportFragmentManager().findFragmentByTag("FragmentOne").; 

     dlMain = (DrawerLayout) findViewById(R.id.dlMain); 
     btnClick = (Button) findViewById(R.id.btnClick); 

     btnClick.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.e("Btn Click", "click"); 
       click.onClick("Button Clicked!"); 
      } 
     }); 
    } 
} 

FragmentOne

public class FragmentOne extends Fragment implements Click { 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_one, container, false); 
     return view; 
    } 

    @Override 
    public void onClick(String msg) { 
     Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT).show(); 
    } 
} 

Aber ich bin immer Fehler in MainActivity Diese meine Fehlerprotokolle ist.

05-09 10: 30: 49,092 19.101-19.101/com.psk.interfacetest E/Btn klicken: Klicken Sie 05-09 Oktober: 30: 49,095 19.101-19.101/com.psk.interfacetest E/Android Runtime: FATAL AUSNAHME: Haupt Prozess: com.psk.interfacetest, PID: 19101 java.lang.NullPointerException bei com.psk.interfacetest.MainActivity $ 1.onClick (MainActivity.java:37) bei android.view.View .performClick (View.java:4471) bei android.view.View $ PerformClick.run (View.java:18778) bei android.os.Handler.handleCallback (H andler.java:808) bei android.os.Handler.dispatchMessage (Handler.java:103) bei android.os.Looper.loop (Looper.java:193) bei android.app.ActivityThread.main (ActivityThread. java: 5345) bei java.lang.reflect.Method.invokeNative (Mutter Methode) bei java.lang.reflect.Method.invoke (Method.java:515) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller .run (ZygoteInit.java:824) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:640) bei dalvik.system.NativeStart.main (native Methode)

Antwort

1

Ihr Fall, Fragment ersetzen kann nicht abgeschlossen werden. Sie sollten also die Schnittstelle aus dem Fragment registrieren. Sie können diesen Code untersuchen.

 public class AActivity extends FragmentActivity { 
      Click click; 
      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 
FragmentOne fragmentOne = new FragmentOne(); 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(R.id.flContainer, fragmentOne,"FragmentOne"); 
     ft.commit(); 
       DrawerLayout dlMain = (DrawerLayout)findViewById(R.id.dlMain); 
      Button btnClick = (Button) findViewById(R.id.btnClick); 

       btnClick.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         Log.e("Btn Click", "click"); 
         click.onClick("Button Clicked!"); 
        } 
       }); 
      } 

      public void setCallback(Click callback) { 
       this.click=callback; 
      } 
      public interface Click { 
       void onClick(String msg); 
      } 
     } 

     public class AFragment extends Fragment implements AActivity.Click { 
      @Override 
      public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
       super.onViewCreated(view, savedInstanceState); 
       if (getActivity() != null) { 
        ((AActivity)getActivity()).setCallback(this); 
       } 
      } 

      @Override 
      public void onClick(String msg) { 

      } 
     } 
+0

Dank .. -Arbeiten groß ..... – Rushvi

1
try this 



public class MainActivity extends FragmentActivity { 
    DrawerLayout dlMain; 
    Button btnClick; 

    Click click; 
    private FragmentOne fragmentOne; 

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


     fragmentOne = new FragmentOne(); 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(R.id.imageTitleTextView, fragmentOne, "FragmentOne"); 
     ft.commit(); 

     //click = (Click) getSupportFragmentManager().findFragmentByTag("FragmentOne"); 

    dlMain = (DrawerLayout) findViewById(R.id.dlMain); 
     btnClick = (Button) findViewById(R.id.btnClick); 

     btnClick.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.e("Btn Click", "click"); 
       fragmentOne.listener.onClick("Button Clicked!"); 
      } 
     }); 
    } 
} 


public class FragmentOne extends Fragment { 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_one, container, false); 
     return view; 
    } 
Click listener = new Click() { 
    @Override 
    public void onClick(String msg) { 
     Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT).show(); 
    } 
}; 

}