-1

我有一個RecyclerView與填充項目(ImageView,2 x TextView)。在項目點擊我開始一個新的Activity。我想使用材質轉換,我想重新安排ImageViewRecycler項目材料轉換不能正常工作

兩個ImageViews共享相同的轉換名稱。

問題:當我按項目,動漫作品和新的活動開始過渡,但如果我點擊哪個低於第一個項目項目, 過渡將仍然啓動並在第一端行

@Override 
public void openUserDetails(UiBaseUser data, View view, int position) { 
    iwAvatar = ButterKnife.findById(this, R.id.iw_avatar); 

    Pair<View, String> p1 = Pair.create(iwAvatar, "avatar"); 
    ActivityOptionsCompat optionsCompat = ActivityOptionsCompat 
      .makeSceneTransitionAnimation(this, p1); 
    startActivity(UserDetailActivity.getIntent(getApplicationContext(), data), optionsCompat.toBundle()); 
} 

上述代碼在執行SourceActivity並且不具有直接鏈接到item_listXML佈局。這就是爲什麼我在那裏使用Butterknife,找到我想要動畫的ImageView - 但是,這似乎只抓取了第一個元素ImageView而不是實際按下的ImageView

這是我的adapter class(我假設我在這裏失去了一些東西)。在這個ViewHolder類中,我引用了ImageView所在的佈局UserListLayoutitem_list)。

public class UsersAdapter extends BaseAdapter<UiBaseUser, UsersAdapter.UserVH> { 

    private final LayoutInflater layoutInflater; 

    public UsersAdapter(Context context) { 
     this.layoutInflater = LayoutInflater.from(context); 
    } 

    @Override 
    public UserVH onCreateViewHolder(ViewGroup parent, int viewType) { 
     return new UserVH(layoutInflater.inflate(R.layout.item_users, parent, false)); 
    } 

    @Override 
    public void onBindViewHolder(UsersAdapter.UserVH holder, int position) { 
     ViewCompat.setTransitionName(holder.layout.getIwAvatar(), "image_view_" + position); 
     holder.onBind(getItem(position)); 
    } 

    public class UserVH extends RecyclerView.ViewHolder { 

     private UserListLayout layout; 

     public UserVH(View itemView) { 
      super(itemView); 
      layout = (UserListLayout) itemView; 
     } 

     public void onBind(UiBaseUser item) { 
      layout.bind(item); 
     } 

    } 
} 

TargetActivity片斷

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_user_detail); 
    ButterKnife.bind(this); 
    initializeDagger(); 

    bundle = getIntent().getExtras(); 

    if (bundle != null) { 
     transitionName = bundle.getString(EXTRA_TRANSITION_NAME); 
     presenter.onCreate(baseData); 
    } else { 
     throw new IllegalStateException("Initial bundle in UserDetail Activity is null"); 
    } 

    iwAvatar.setTransitionName(transitionName);  
} 

我覺得我失去了一些東西簡單了 - 但直小時的編碼用盡我的腦子不夠好,不要看到它通過。請幫助我。

+0

您正在更改列表項目的過渡名稱,但您的示例中沒有任何內容可以指示目標「活動」視圖的相同內容。 –

+0

我在創建片段中添加了目標活動,以顯示如何通過Bundle設置過渡名稱。我不想把所有的代碼放在這裏,因爲人們通常會忽略更長的帖子。 –

+0

您是否檢查'transitionName'是否包含目標'Activity'中正確位置索引的期望值(我想它是'UserDetailActivity')? –

回答

1

你的問題在於點擊處理程序(openUserDetails(...)這樣做,如果我是正確的)。

iwAvatar = ButterKnife.findById(this, R.id.iw_avatar);是不會在這裏工作,因爲你有多個意見在你的佈局中具有相同的ID R.id.iw_avatar。您可以執行以下操作來找到正確的ImageView實例:

  1. 傳遞選定視圖(可能你itemViewUserVH)到openUserDetails(...)我猜你現在太
  2. 呼叫findViewById(...)上這個view參數找到實際的ImageView
+0

聽起來像它可以工作,會測試並讓你知道。感謝您的建議! –

+0

我已經在活動和適配器之間創建了一個接口,並在適配器中偵聽了onClickEvents,其中我在item上搜索了getAdapterPosition(),然後在ViewHolder中搜索了ImageView。你的回答讓我接受這個,所以我接受它。再次感謝! –