【问题标题】:OnClickListener applies to the last element in an ArrayListOnClickListener 适用于 ArrayList 中的最后一个元素
【发布时间】:2019-08-19 09:47:42
【问题描述】:

正在使用的库SwipCards

我有一个 ArrayList 循环遍历许多卡片就像一副卡片一样移动(类似于 Tinder 的 UI)我决定添加一个 onclicklistener 以便在单击时更改应用于卡片的样式并且它可以工作但是它只适用于 ArrayList 中的最后一张卡片。

flingContainer.setOnItemClickListener(new 
SwipeFlingAdapterView.OnItemClickListener(){
  @override
  public void onItemClicked(int itemPosition, Object dataObject) {
    if (findViewById(R.id.namecard).getVisibility() == (View.VISIBLE)){
     findViewById(R.id.namecard).setVisibility(View.INVISIBLE);
    }
    else if (findViewById(R.id.namecard).getVisibility() == (View.GONE)){
     findViewById(R.id.namecard).setVisibility(View.VISIBLE);
    }
    else if (findViewById(R.id.namecard).getVisibility() == (View.VISIBLE)){
     findViewById(R.id.namecard).setVisibility(View.VISIBLE);
    }
  }

}) 

有没有办法让样式效果应用于堆栈中的顶部卡片(视图中的卡片)而不是 Arraylist 中的底部卡片(最后一张卡片)?

我已经尝试过this solution,,但即使我已经替换了某些方面以匹配我正在使用的库,它似乎也不起作用

【问题讨论】:

  • 我建议你将namecard分配给一个局部变量,甚至是一个字段。每次点击您可能会查找 4 次(这不是免费的)。
  • @AjahnCharles 请原谅我对 Java 的无知,我可以在 Java 中为当前用户的信息创建一个相当于 php 会话的内容吗......?
  • 在活动的生命周期内,您可以将信息存储为活动类中的字段(或者更好的是,您可以使用 ViewModel developer.android.com/topic/libraries/architecture/viewmodel)。在活动之间,您可以使用 Intent extras 传递少量数据(我通常只传递 id 或多步表单的字段值)。除此之外,您还可以使用 SharedPreferences 或 Android Room 或 Realm 等本地数据库。

标签: java android android-studio


【解决方案1】:

对于任何使用此库并且您想在视图中操作卡片的人,解决方案是 getSelectedView()

flingContainer.setOnItemClickListener(new  SwipeFlingAdapterView.OnItemClickListener(){
@override
 public void onItemClicked(int itemPosition, Object dataObject) {

    View view = flingContainer.getSelcetedView();
    if (view.findViewById(R.id.namecard).getVisibility() == (View.VISIBLE)){
     view.findViewById(R.id.namecard).setVisibility(View.INVISIBLE);
    }
    else if (view.findViewById(R.id.namecard).getVisibility() == (View.GONE)){
      view.findViewById(R.id.namecard).setVisibility(View.VISIBLE);
    }
    else if (view.findViewById(R.id.namecard).getVisibility() == (View.VISIBLE)){
     view.findViewById(R.id.namecard).setVisibility(View.VISIBLE);
    }

    arrayAdapter.notifyDataSetChanged();
    }

    }) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2018-11-25
    • 2020-07-09
    相关资源
    最近更新 更多