【问题标题】:how to get text of the neighbour textviews on some other textview's onclick event in dynamic table?如何在动态表中的其他一些文本视图 onclick 事件上获取相邻文本视图的文本?
【发布时间】:2026-02-10 16:50:02
【问题描述】:

我在这样的表格布局中有文本视图

----------------
|txt1|txt2|txt3|
----------------
|txt4|txt5|txt6|
----------------
|txt7|txt8|txt9|
----------------
|txt1|txt2|txt3|
----------------
|txt4|txt5|txt6|
----------------
|txt7|txt8|txt9|

以此类推,以此类推0

以这种方式,我在表格布局的 for 循环中一次又一次地添加 textviews,以适应动态到来的数据...

在 txt7 点击监听事件我可以像这样得到 txt7 的文本

((TextView)v).getText().toString();

现在我需要 txt7 点击事件上的 txt8 和 txt9 文本

有人建议我通过标记 textview 来做到这一点

TextView uniqueTextView = (TextView)findViewById(R.id.unique_id);
TextView neighbourView = new TextView();
neighbourView.setTag(uniqueTextView);

public void onTextViewClick(TextView view) {
TextView uniqueTextView = (TextView)view.getTag();
String text = uniqueTextView.getText().toString();   }

但这对于一个文本视图...我如何在 txt7 点击侦听器上获取两个文本视图(txt8 + txt9)的文本....另外我还需要来自 txt7 的文本....

如果不清楚可以评论....

这是我正在创建的动态表

TableRow tr1 = (TableRow) new TableRow(this);
TextView txt1=new TextView(this);
TextView txt2=new TextView(this);
TextView txt3=new TextView(this);
txt1.setText("Data1);
txt2.setText("Data2);
txt3.setText("Data3);
txt1.setTag(1, txt2.getText().toString());
txt1.setTag(2, txt3.getText().toString());

txt1.setOnClickListener(new View.OnClickListener() 
{
     public void onClick(View v) 
     {
    try
    {
          Log.i("asdasd","Yahoo");
              Toast(((TextView)v).getTag(1).toString());
              Toast(((TextView)v).getTag(2).toString());
    }
    catch(Exception e)
    {
         Log.i("Error came while getting tag of txt1", e.getMessage());
        Toast("unable to bind tag");
        }
     }
});

tr1.addView(txt1);
tr1.addView(txt2);
tr1.addView(txt3);
TableLayout tl.addView(tr1,new TableLayout.LayoutParams(layoutParams));

因为我无法设置 txt1 代替 ((TextView)v),因为它总是会给出最后一个表格行的 txt1 的文本

04-20 12:42:39.236: ERROR/AndroidRuntime(522): Uncaught handler: thread main exiting due to uncaught exception
04-20 12:42:39.476: ERROR/AndroidRuntime(522): java.lang.NullPointerException: println needs a message
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.util.Log.println(Native Method)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.util.Log.i(Log.java:136)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at com.connection.demotable$1.onClick(demotable.java:431)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.view.View.performClick(View.java:2364)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.view.View.onTouchEvent(View.java:4179)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.widget.TextView.onTouchEvent(TextView.java:6541)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.view.View.dispatchTouchEvent(View.java:3709)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.os.Looper.loop(Looper.java:123)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at android.app.ActivityThread.main(ActivityThread.java:4363)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at java.lang.reflect.Method.invokeNative(Native Method)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at java.lang.reflect.Method.invoke(Method.java:521)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-20 12:42:39.476: ERROR/AndroidRuntime(522):     at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 如何获取动态生成的文本视图的标签。如果我正在应用这个...--((TextView)v).getTag().toString();--... 那么它会给出错误...。但是如果我应用这个--txt7.getTag( ).toString());--那么就是tag....
  • 这是我遇到的错误
  • 看到你在做getTag() 而不是getTag(1)getTag(2)
  • 现在这个错误来了 java.lang.IllegalArgumentException: The key must be an application-specific resource id.
  • 哎呀,id 似乎需要作为资源存在。 The specified key should be an id declared in the resources of the application to ensure it is unique (see the ID resource type). Keys identified as belonging to the Android framework or not associated with any package will cause an IllegalArgumentException to be thrown.空间不足,看下一条评论

标签: android tags textview


【解决方案1】:

你为什么不试试setTag (int key, Object tag)getTag(int)

【讨论】:

  • 如何获取动态生成的textview的标签
  • 你能把你的代码贴在你动态生成文本视图的地方吗?在那里指出它会更容易
  • TableRow tr1 = (TableRow) new TableRow(this); TextView txt1=new TextView(this); txt11.setText(strinarr[0]); tr1.addView(txt1); tl.addView(tr1,new TableLayout.LayoutParams(layoutParams));
【解决方案2】:

在您发布的示例代码中试试这个

txt7.setTag(1, txt8);
txt7.setTag(2, txt9);

public void onTextViewClick(TextView view) {
TextView txt8 = (TextView)view.getTag(1);
TextView txt9 = (TextView)view.getTag(2);   }

【讨论】:

    【解决方案3】:

    我还没有使用表格布局。但是你可以这样使用

    TableRow t =  (TableRow) v.getParent();
    TextView t1 = (TextView) t.getChildAt(0);
    TextView t2 = (TextView) t.getChildAt(1);
    TextView t3 = (TextView) t.getChildAt(2);
    

    【讨论】: