【问题标题】:Get index position of element inside a inflated view获取膨胀视图中元素的索引位置
【发布时间】:2017-09-12 11:00:14
【问题描述】:

我正在尝试获取我的膨胀视图内的微调器的索引。

虽然我成功地检索了我的子视图的索引,当它像这样点击按钮时被膨胀:

itineraryDetailLL = (LinearLayout) findViewById(R.id.itineraryDetailLinearlayout);
childView = getLayoutInflater().inflate(R.layout.cardview, null);
itineraryDetailLL.addView(childView);

int posValue = itineraryDetailLL.indexOfChild(childView);
Toast.makeText ( PlanItineraryDetailView.this, Integer.toString(posValue), Toast.LENGTH_SHORT ).show();

这段代码返回我0 用于第一个膨胀视图,1 用于第二个膨胀视图等等......

问题

但是当我试图在每个子视图中获取微调器的索引位置(通过调用 setOnTouchListener 事件)时,它会返回每个微调器的最后一个索引位置

spinnerPlanItinerary.setOnTouchListener(new View.OnTouchListener(){

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int indexValueTown = itineraryDetailLL.indexOfChild(childView);
            Toast.makeText ( PlanItineraryDetailView.this, Integer.toString(indexValueTown), Toast.LENGTH_SHORT ).show();
            return true;
        }

    });

这将返回 1 用于我的第一个充气视图中的微调器,1 用于微调器我的第二个充气视图(它应该返回 0 用于我的第一个充气视图中的微调器,1 用于我的第二个充气视图中的微调器查看)。

我希望我的问题很清楚。

请注意,我现在只为测试添加两个视图。

【问题讨论】:

  • 将 onitem clicklistener 用于微调器项目触摸事件。
  • 我也这样做了,但问题仍然存在。
  • 是itineraryDetailLL & childView 全局变量吗?如果是这样,则使它们成为局部变量和最终变量。类似于: final LinearLayout itineraryDetailLL = (LinearLayout) findVi.... & see
  • 你到底想要什么?
  • @SafanMomin 检查此链接我认为它的工作。 stackoverflow.com/questions/27886737/… 第二个是:- stackoverflow.com/questions/35607524/…

标签: android ontouchlistener layout-inflater


【解决方案1】:

发布为答案,以便在这里绊倒的人可能会得到解决方案。

您的问题是您的 itineraryDetailLLchildView 是全局变量。这意味着每当您通过按钮单击添加新项目时,值都会更新到最后一个膨胀的视图。现在,每当您触摸 Spinner 时,您都会按预期获得最后一个索引。

因此,将它们设为本地和final 变量可确保您在触摸微调器时引用相同的视图。

我不完全理解您的要求或您想要做什么。可能有更好的方法来实现这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多