Как получить текст соседних текстовых представлений по событию onclick какого-либо другого текстового представления в динамической таблице? - PullRequest
1 голос
/ 20 апреля 2011

У меня есть текстовые представления в макете таблицы, как это

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

и т. Д. И т. П. 0

таким образом я снова и снова добавляю текстовые представления в цикл for в макете таблицы в соответствии с данными, которые поступают динамически ...

на событии прослушивания клика txt7 я могу получить текст txt7 следующим образом

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

теперь мне нужен текст txt8 и текст txt9 при событии щелчка txt7

какой-то орган предложил мне сделать это, пометив 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();   }

но это для одного textview ... как я могу получить текст обоих textview (txt8 + txt9) на слушателе txt7 click .... плюс мне также нужен текст из 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)

Ответы [ 3 ]

2 голосов
/ 20 апреля 2011

почему бы вам не попробовать setTag (ключ int, тег объекта) и getTag (int)

1 голос
/ 20 апреля 2011

Я еще не использовал раскладку стола. Но вы можете использовать как это

TableRow t =  (TableRow) v.getParent();
TextView t1 = (TextView) t.getChildAt(0);
TextView t2 = (TextView) t.getChildAt(1);
TextView t3 = (TextView) t.getChildAt(2);
1 голос
/ 20 апреля 2011

Как в примере кода, который вы разместили, попробуйте это

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);   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...