#java #android
#java #Android
Вопрос:
Почему я всегда вижу последний идентификатор независимо от того, какой текст я нажимаю? Я хотел бы видеть правильный фрагмент, отображаемый в макете, который я создал в соответствии с соответствующим нажатым текстом. Я всегда вижу фрагмент «альтернативы». Я понял, что тегам можно помочь, но я не мог понять, как их использовать. Кроме того, я пытался использовать разные версии FragmentManager и FragmentTransaction и даже убрать переключатель и вызывать каждый setOnClickListener textview отдельно, но ничего не помогло.
Это мой файл активности:
IngredientsFragment ingredientsFragment;
FavouritesFragment favouritesFragment;
FeedbacksFragment feedbacksFragment;
Write_Feedback_Fragment writeFeedbackFragment;
AlternativesFragment alternativesFragment;
TextView ingredients;
TextView favourites;
TextView feedbacks;
TextView alternatives;
TextView writeFeedback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product_details);
window=this.getWindow();
window.setStatusBarColor(this.getResources().getColor(R.color.colorPrimaryDark));
ingredients= (TextView) findViewById(R.id.ingredients_option);
favourites= (TextView) findViewById(R.id.favorites_option);
feedbacks= (TextView) findViewById(R.id.watch_feedback_option);
writeFeedback= (TextView) findViewById(R.id.add_feedback_option);
alternatives= (TextView) findViewById(R.id.alternatives_option);
ingredients.setOnClickListener(this);
favourites.setOnClickListener(this);
feedbacks.setOnClickListener(this);
writeFeedback.setOnClickListener(this);
alternatives.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId())
{
case R.id.ingredients_option:
ingredientsFragment= new IngredientsFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,ingredientsFragment).commit();
break;
case R.id.favorites_option:
favouritesFragment= new FavouritesFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,favouritesFragment).commit();
break;
case R.id.watch_feedback_option:
feedbacksFragment= new FeedbacksFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,feedbacksFragment).commit();
break;
case R.id.add_feedback_option:
writeFeedbackFragment= new Write_Feedback_Fragment();
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,writeFeedbackFragment).commit();
break;
case R.id.alternatives_option:
alternativesFragment= new AlternativesFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,alternativesFragment).commit();
break;
}
}
}
Это мой XML-файл:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ProductDetails">
<RelativeLayout
android:id="@ id/recommendation_template"
android:layout_width="match_parent"
android:layout_height="142dp"
android:background="@android:color/white">
<ImageView
android:id="@ id/registartion_arrow"
android:layout_width="45dp"
android:layout_height="34dp"
android:layout_alignParentRight="true"
android:src="@drawable/ic_arrow_forward_black_24dp" />
<TextView
android:id="@ id/rec_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="10dp"
android:text="Recommendation:"
android:textSize="25dp"
android:textStyle="bold"
android:textColor="@android:color/black"/>
<ImageView
android:id="@ id/vi_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/rec_tv"
android:layout_alignParentLeft="true"
android:layout_marginLeft="0dp"
android:layout_marginTop="26dp"
android:paddingLeft="80dp"
android:src="@drawable/ic_check" />
<TextView
android:id="@ id/vi_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/vi_image"
android:layout_marginLeft="4dp"
android:layout_marginTop="-29dp"
android:layout_toRightOf="@id/vi_image"
android:text="This is for you"
android:textColor="@android:color/black"
android:textSize="20dp" />
<ImageView
android:id="@ id/not_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/vi_image"
android:layout_alignParentLeft="true"
android:layout_marginLeft="0dp"
android:layout_marginTop="3dp"
android:paddingLeft="80dp"
android:src="@drawable/ic_do_not" />
<TextView
android:id="@ id/not_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/not_image"
android:layout_marginLeft="5dp"
android:layout_marginTop="-27dp"
android:layout_toRightOf="@id/not_image"
android:text="Not for you"
android:textColor="@android:color/black"
android:textSize="20dp" />
</RelativeLayout>
<HorizontalScrollView
android:id="@ id/recommendation_scrollView"
android:layout_width="match_parent"
android:layout_height="83dp"
android:layout_below="@id/recommendation_template"
android:layout_marginTop="7dp">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/recommendation_template"
style="?android:attr/borderlessButtonStyle">
<TextView
android:id="@ id/ingredients_option"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:drawableTop="@drawable/ingredients"
android:text="Ingredients" />
<TextView
android:id="@ id/favorites_option"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:drawableTop="@drawable/ic_star"
android:paddingLeft="80dp"
android:text="Favorites" />
<TextView
android:id="@ id/watch_feedback_option"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:drawableTop="@drawable/customer_review"
android:paddingLeft="145dp"
android:text="Feedbacks" />
<TextView
android:id="@ id/add_feedback_option"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:drawableTop="@drawable/write_feedback"
android:paddingLeft="220dp"
android:text="Write feedback" />
<TextView
android:id="@ id/alternatives_option"
android:layout_width="408dp"
android:layout_height="90dp"
android:layout_gravity="left"
android:drawableTop="@drawable/ic_alternatives"
android:paddingLeft="320dp"
android:text="Alternatives" />
</FrameLayout>
</HorizontalScrollView>
<ScrollView
android:id="@ id/scrollView_container"
android:layout_width="match_parent"
android:layout_height="499dp"
android:layout_below="@id/recommendation_scrollView">
<RelativeLayout
android:id="@ id/fragment_container"
android:layout_width="match_parent"
android:layout_height="463dp">
</RelativeLayout>
</ScrollView>
</RelativeLayout>
Комментарии:
1. пожалуйста, опишите вашу проблему более подробно. чего вы хотите достичь? чем ваш результат отличается от того, чего вы хотите достичь?
2. Большое вам спасибо за комментарий. Я добавил описание.
Ответ №1:
Ваш код должен работать таким образом. Проблема в вашем макете. Смотрите текстовые представления в вашем FrameLayout. Вы определяете paddingLeft и layout_width таким образом, чтобы ваш вариант textview alternatives_option накладывался на все остальные текстовые представления. Вот почему в onclick вы всегда получаете идентификатор этого представления.
Я предлагаю выполнить руководство по компоновке XML.
<TextView
android:id="@ id/alternatives_option"
android:layout_width="408dp"
android:layout_height="90dp"
android:layout_gravity="left"
android:drawableTop="@drawable/ic_alternatives"
android:paddingLeft="320dp"
android:text="Alternatives" />
Комментарии:
1. Спасибо! Это работает! Я изменил свой макет gravity на start и заменил paddingLeft на layout_marginStart.