0

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

Мне нужен выход всякий раз, когда кнопка нажимает на огонь в Activity.

Вот мой код. Пожалуйста, помогите мне решить эту проблему.

Inteface

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

Главная 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(); 
    } 
} 

Но я получаю сообщение об ошибке в MainActivity Это мои журналы ошибок.

05-09 10: 30: 49,092 19101-19101/com.psk.interfacetest E/Btn Нажмите: нажмите 05-09 10: 30: 49,095 19101-19101/com.psk.interfacetest E/AndroidRuntime: неустранимый: Основной процесс: com.psk.interfacetest, ПИД: 19101 java.lang.NullPointerException в com.psk.interfacetest.MainActivity $ 1.onClick (MainActivity.java:37) в android.view.View .performClick (View.java:4471) на android.view.View $ PerformClick.run (View.java:18778) на android.os.Handler.handleCallback (H andler.java:808) на android.os.Handler.dispatchMessage (Handler.java:103) на android.os.Looper.loop (Looper.java:193) на android.app.ActivityThread.main (ActivityThread. java: 5345) по адресу java.lang.reflect.Method.invokeNative (собственный метод) по адресу java.lang.reflect.Method.invoke (Method.java:515) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller .run (ZygoteInit.java:824) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:640) на dalvik.system.NativeStart.main (Родной метод)

ответ

1

Ваш футляр, заменитель фрагмента не может быть завершен. Поэтому вы должны зарегистрировать интерфейс из фрагмента. Вы можете изучить этот код.

 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

Спасибо .. работа большой ..... – 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(); 
    } 
}; 

} 

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

  • Нет связанных вопросов^_^