【问题标题】:Adding OnClickListener to dynamically created Textviews将 OnClickListener 添加到动态创建的 Textviews
【发布时间】:2014-02-13 14:04:10
【问题描述】:

所以我试图将 OnClickListeners 添加到水平滚动内动态创建的文本视图中。我目前已经动态创建了文本视图,但是当然,我设置 OnClickListener 的方式会导致对其中一个 TextView 的任何点击都只发送最后一个创建的 TextView 的信息。例如,我有 1000 个文本视图,所有 1000 个单击都会给我第 1000 个文本视图的数据。我想拉出被点击的 .text.toString() 以便将该数据发送到其他地方。这是我得到的:

protected void onPostExecute(JSONArray jArr) {

        try {
            for (int i = 0; i < jArr.length(); i++) {

                flightList.add(jArr.getString(i));
                aText = new TextView(getApplicationContext());
                aText.setText(jArr.getString(i));
                aText.setWidth(50);
                aText.setBackgroundColor(Color.BLACK);
                aText.setTextColor(Color.WHITE);
                aText.setOnClickListener(new OnClickListener(){

                    @Override
                    public void onClick(View v){
                        GetMillis myTimer = new GetMillis();
                        aURL = "http://somelink?startTs="
                                + myTimer.getThreeAMToday()
                                + "&endTs="
                                + myTimer.getFourAMTomorrow()
                                + "&datafield="
                                + aText.getText().toString();

                        new myScheduleTask().execute();
                    }
                });

任何帮助表示赞赏!

【问题讨论】:

    标签: android textview onclicklistener


    【解决方案1】:

    您可以使用aText.setTag() 来存储您要发送的字符串。单击视图时,您可以使用v 参数从标签中获取字符串

    【讨论】:

    • 类似的选项是使用aText.setId()。只是你想使用 String 还是 int 的问题。
    • 所以我基本上会在 TextView 创建期间去 aText.setId(jArr.getString(i));然后在 url 中使用 v.getId().toString()???
    • @Elliott aText.setTag / v.getTag
    【解决方案2】:

    如果你只有 TextViews,你可以这样做:

    @override
    public void onClick(View v) {
          String clickedTextViewValue = ((TextView) v).getText().toString();
    }
    

    【讨论】:

      【解决方案3】:

      这样试试

      设置aText.setOnClickListener(this);

          @Override
          public void onClick(View v) {
          // TODO Auto-generated method stub
           aURL = "http://somelink?startTs="
                                  + myTimer.getThreeAMToday()
                                  + "&endTs="
                                  + myTimer.getFourAMTomorrow()
                                  + "&datafield="
                                  + v.getText().toString();
      
          }
      

      【讨论】:

        【解决方案4】:

        也许这会有所帮助

        /** This is used to create Answer Letters */
            for (int i = 0; i < length; i++) {
        
                mAnsImage[i] = new TextView(getActivity());         
                mAnsImage[i].setOnClickListener(onAnswerClickListener);
            }
        

        【讨论】:

          【解决方案5】:

          使用 textView.setID() 方法为每个 TextView 设置唯一的 Id,然后在 onClickListener 的 onClick 方法中,使用它的 ID 获取 TextView 并执行适当的操作。

          public void onClick(View v){
               switch(v.getID()){
               case 1:
                    //This is TextView with id=1
                    break;
               }
          }
          

          【讨论】:

          • 所以我合法地创建了 1000 个文本视图,每个文本视图都有不同的字符串作为文本。这种情况很多......
          • 另外,请尝试将您的 onClick 方法排除在循环之外。这将使代码看起来更干净。
          • 仅当您正在为所有这些寻找不同的实现时。如果您只想要他们的文本,只需执行 public void onClick(View v){ String text = v.getText().toString() }。
          猜你喜欢
          • 2015-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-03
          • 2018-02-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多