1

Я пытаюсь создать общий переход между двумя действиями. Это, похоже, работает найти между двумя макетами, каждая из которых содержит один ImageView. Однако у меня возникают проблемы с тем, чтобы этот переход работал с ListView.Ошибка перехода на общий элемент ListView

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

Я создал простой вид списка с компоновкой пользовательских строк:

row_detailed.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:weightSum="1"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Daft Punk" 
     android:id="@+id/primary_textview" 
     android:layout_gravity="center_horizontal" 
     android:layout_weight="0.07" 
     android:layout_alignTop="@+id/primary_imageview" 
     android:layout_toRightOf="@+id/primary_imageview" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Random Access Memories" 
     android:id="@+id/textView4" 
     android:layout_gravity="center_horizontal" 
     android:layout_weight="0.07" 
     android:layout_alignBottom="@+id/primary_imageview" 
     android:layout_toRightOf="@+id/primary_imageview" /> 


    <ImageView 
     android:layout_width="84dp" 
     android:layout_height="84dp" 
     android:id="@+id/primary_imageview" 
     android:src="@drawable/ram" 
     android:layout_weight="0.07" /> 

</RelativeLayout> 

Схема для вторичной деятельности, activity_transition_secondary.xml:

<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context="legiocode.com.tapstrprototype.activity.TransitionSecondaryActivity"> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/secondary_imageview" 
     android:src="@drawable/ram" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentEnd="true" /> 

</RelativeLayout> 

Основная деятельность, TransitionPrimaryActivity.java:

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

     ListView listView = (ListView)findViewById(R.id.listView2); 
     ArrayAdapter<String> adapter = new ArrayAdapter(this, 
       R.layout.row_detailed, 
       R.id.primary_textview, 
       items); 
     listView.setAdapter(adapter); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       String transitionName = getString(R.string.transition_image) + String.format("_%d", i); 

       ImageView imageView = (ImageView)findViewById(R.id.primary_imageview); 
       imageView.setTransitionName(transitionName); 

       Intent intent = new Intent(TransitionPrimaryActivity.this, TransitionSecondaryActivity.class); 
       intent.putExtra(TransitionSecondaryActivity.TRANSITION_NAME, transitionName); 

       ActivityOptionsCompat options = 
         ActivityOptionsCompat.makeSceneTransitionAnimation(TransitionPrimaryActivity.this, 
           imageView, // The view which starts the transition 
           transitionName // The transitionName of the view we’re transitioning to 
         ); 
       ActivityCompat.startActivity(TransitionPrimaryActivity.this, intent, options.toBundle()); 
      } 
     }); 
    } 

Вторичный активность, TransitionSecondaryActivity.java:

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

     String transitionName = getIntent().getStringExtra(TRANSITION_NAME); 

     ImageView imageView = (ImageView)findViewById(R.id.secondary_imageview); 
     imageView.setTransitionName(transitionName); 
    } 

Я пытался динамически реализовать имена переходов, но это, кажется, не имеет большого разница. Правильно ли настрою переход?

+0

Вы решили это? –

+0

В конечном итоге я понял, что мне нужно было получить доступ к моему другому ImageView через View, который был на самом деле нажат. – user1927638

ответ

2

Вы должны получить доступ к фактически щелкнул View (в этом случае параметр вид) в

onItemClick(AdapterView<?> adapterView, View view, int i, long l) 

С

ImageView imageView = (ImageView)findViewById(R.id.primary_imageview); 

вы всегда доступ к первому элементу в списке.

PS: Поместите имена переходов внутри xml. Делает это намного легче читать.

+0

В конечном итоге я понял, что мне пришлось получить доступ к моему другому ImageView через View, который был на самом деле нажат. Благодаря! – user1927638