2013-12-23 4 views
3

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

Вот код Java:

первый метод

public class About extends Fragment { 

    Intent intent; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.about, container, false); 

     intent = new Intent(getActivity(), Contact_Developer.class); 
     final Button button = (Button) rootView.findViewById(R.id.btnContactDev); 

     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       startActivity(intent); 
      } 
     }); 

     return rootView; 
    } 
} 

второй метод

public class About extends Fragment { 

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

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.about, container, false); 

     Button button = (Button) rootView.findViewById(R.id.btnContactDev); 
     button.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       Intent intent = new Intent(getActivity(), Contact_Developer.class); 
       getActivity().startActivity(intent); 
      } 
     }); 
     return rootView; 
    } 
} 

Я действительно не знаю, что происходит и почему я получаю силы закрывается, но если кто-нибудь может помочь мне и немного объяснить, что я сделал неправильно, что было бы более чем достаточно.

+0

опубликовать LogCat. – Hariharan

ответ

2

Не обрабатывайте onClick для кнопки фрагмента в Фрагменте. Пусть это будет родительская деятельность. И начните свою деятельность с родительской активности.

Чтобы убедиться, что кнопка onClick событие посылается родительскому деятельности, убедитесь, что в вашем about.xml, для кнопки с id btnContactDev, у вас есть следующие параметры:

<Button android:id="@+id/btnContactDev" 
    android:onClick="buttonClick" 
    ... 
/> 

и в вашей родительской деятельности (родительский элемент About фрагмент), у вас есть:

public void buttonClick(View v) { 
    switch(v.getId()) { 
    case R.id.btnContactDev: 
     Intent myIntent = new Intent(); 
     myIntent.setClassName(your_package_name_string, your_activity_name_string); 
     // for ex: your package name can be "com.example" 
     // your activity name will be "com.example.Contact_Developer" 
     startActivity(myIntent); 
    break; 
    } 
} 

HTH.

PS: Это решение очень специфично для ваших требований. В общем, лучше всего обрабатывать события onClick, связанные с фрагментом внутри класса фрагмента.

PS: Да, как говорится в другом решении, убедитесь, что вы зарегистрировали операцию Contact_Developer в своем файле Manifest.

+0

Я изменил его, но что мне делать с новым View.OnClickListener? Это дает мне ошибку, говоря, чтобы добавить Unimplemented Method. Другая ошибка: Intent myIntent = new Intent (this, Contact_Developer.class); когда я нависаю над ним, он говорит мне «Удалить аргументы, чтобы соответствовать намерению», когда я нажимаю на него. Я получаю этот Intent myIntent = new Intent(); Что мне делать? Я ценю помощь – Kodi

+0

Вам не нужен View.OnClickListener, если вы реализуете его так, как я сказал. И для ошибки Intent я отредактировал код - PLS посмотреть на него. –

+0

Хорошо для your_package_name_string и your_activity_name_string, что я на самом деле там положил? Имена пакетов? Потому что я пробовал это, и это дало мне некоторую ошибку. Это единственные две вещи, которые я не получаю – Kodi

0

Ha Вы заявили о правильной деятельности в AndroidManifest.xml? Каждое действие другого, то первое должно быть объявлено внутри тега приложения, например:

<activity 
    android:name=".Contact_Developer" 
    android:label="@string/app_name" > 
</activity> 

Если он не найден, он будет давать силы близко.

+0

Где я могу это сделать в манифесте? Ниже <активность android: name = "your.package.MainActivity"? У меня уже есть Contact_Developer в манифесте, я должен поместить код в любом случае? – Kodi

0

Я думаю, что проблема здесь в том, что деятельность еще не готова.

Я бы не рекомендовал вам следовать решению харикриса, даже если он работает. Обычно неверно использовать код (onClick(), который обрабатывает событие click) в вашем XML-файле. Например, будет очень сложно выследить этот фрагмент кода, чтобы просмотреть/изменить его в будущем самостоятельно, не говоря уже о другом разработчике в вашей команде.

Я предлагаю прослушать мероприятие, которое будет готово к действию, т.е. onActivityCreated() в вашем классе фрагментов. Переопределите реализацию одного и того же метода и вызовите что-то в своей деятельности, например. onFragmentReady(), как в примере ниже.

Фрагмент класса:

public class About extends Fragment { 

    Intent intent; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.about, container, false); 

     intent = new Intent(getActivity(), Contact_Developer.class); 
     final Button button = (Button) rootView.findViewById(R.id.btnContactDev); 

     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       startActivity(intent); 
      } 
     }); 

     return rootView; 
    } 

    @Override 
     public void onActivityCreated (Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 

      ((MyActivity) this.getActivity()).onFragmentReady(); 
     } 
} 

активность класса:

public class MyActivity extends FragmentActivity { 
    private void onFragmentReady() { 
     Log.i(TAG, "testing"); 
     intent = new Intent(getActivity(), Contact_Developer.class); 
     final Button button = (Button) rootView.findViewById(R.id.btnContactDev); 

     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       startActivity(intent); 
      } 
     }); 
    } 

    public class About extends Fragment { 
     ... 
    } 
} 
0

Чтобы начать активность из фрагмента:

myButton.setOnClickListener((v) -> { 
    Intent myIntent = new Intent(getActivity(), TargetActivity.class); 
    startActivity(myIntent); 
}); 
Смежные вопросы