Запустите новое действие из фрагмента в Android Studio
Я просто хочу открыть SkipActivity
от MondayFragment
и потерпеть неудачу в ошибке. Размах между fragments
это работа, но когда я нажимаю на кнопку пропуска, перейти к другому Activity
- приложение сломано (закрыто):
Весь соответствующий код прилагается, пожалуйста, помогите:
public class MondayFragment extends Fragment {
final String LOG_TAG="myLogs";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.fragment_monday, container, false);
TextView txt=(TextView) v.findViewById(R.id.skip);
txt.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
((TextView)getActivity().findViewById(R.id.skip)).setText("Access from Monday Fragment");
//Start your activity here
Intent i = new Intent(getActivity(),SkipActivity.class);
startActivity(i);
}
});
return v;
}
}
Это класс активности Java:
public class SkipActivity extends AppCompatActivity {
@Override
protected void onCreate( Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.after_skip_scr);
}
}
Это класс MainActivity - я думаю, здесь нечего менять:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the content of the activity to use the activity_main.xml layout file
setContentView(R.layout.activity_main);
// Find the view pager that will allow the user to swipe between fragments
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
// Create an adapter that knows which fragment should be shown on each page
SimpleFragmentPagerAdapter adapter = new SimpleFragmentPagerAdapter(getSupportFragmentManager());
// Set the adapter onto the view pager
viewPager.setAdapter(adapter);
}
}
Ниже файлы перекомпоновки: первый для фрагмента понедельника
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/monday_main"
android:background="#a7cbeb">
<TextView
android:id="@+id/welcome_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_centerInParent="true"
android:textColor="#191970"
android:text="Welcome to Circles"
android:textSize="29sp"
/>
<TextView
android:id="@+id/skip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="54px"
android:textStyle="italic"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:layout_marginRight="25dp"
android:layout_marginTop="25dp"
android:text="skip"
android:textColor="#ffffff"
android:onClick="openSkipActivity"
/>
</RelativeLayout>
И этот для основной деятельности:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
5 ответов
TNX за ответы! Проблема была - я не объявил SkipActivity в файле манифеста.
На данный момент я сделал это - приложение работает, и я могу провести между фрагментами и запустить другую активность из фрагмента.
TNX много!
Почему вы занимаетесь этой линией
((TextView)getActivity().findViewById(R.id.skip)).setText("Access from Monday Fragment");
и поделиться журналом ошибок logcat.
или попробуйте это
декалировать это
Context context;
txt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, SkipActivity.class);
context.startActivity(intent);
}
});
@Dima, попробуйте это:
public class MondayFragment extends Fragment implements OnClickListener
{
final String LOG_TAG="myLogs";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.fragment_monday, container, false);
// Views
TextView txt=(TextView) v.findViewById(R.id.skip);
txt.setOnClickListener(this);
return v;
}
// onClick Method
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.skip:
((TextView)getActivity().findViewById(R.id.skip)).setText("Access from Monday Fragment");
Intent i = new Intent(getActivity(),SkipActivity.class);
startActivity(i);
break;
default:
break;
}
}
}
Вы можете назвать деятельность по:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(getActivity(), Contact_Developer.class);
getActivity().startActivity(intent);
}
});
Ваше приложение аварийно завершается при событии щелчка, потому что ваше представление является нулевым, причина в том, что вы пытаетесь выяснить представление с помощью activity.findViewById
который, очевидно, вернет ноль.
((TextView)getActivity().findViewById(R.id.skip)).setText("Access from Monday Fragment");
Изменить выше строки с этим
((TextView)v.findViewById(R.id.skip)).setText("Access from Monday Fragment");
Ведь вы запускаете активность из события onClick, поэтому нет смысла обновлять текст пропуска текстового просмотра. но если вы все еще хотите это сделать, нет проблем.
Просто замените приведенную выше строку кода, это должно исправить вашу проблему.
В качестве предложения, если вы хотите обновить текст пропуска текста при щелчке или любом другом месте, создайте экземпляр уровня класса, скажем TextView skipTextView
и инициализировать в onCreateView
тогда просто используйте skipTextView.setTex("<text>")"
повсюду, где когда-либо требовалось.