【问题标题】:OnClickListener on dynamic table layout动态表格布局上的 OnClickListener
【发布时间】:2014-03-31 14:38:22
【问题描述】:

我想将 onClicklistener 添加到生成的动态表中的项目中。 我的代码是

for(int k=0;k<i;k++)        
{

    tr[k]=new TableRow(getApplicationContext());
    tr[k].layout(0, 0, 0, 0);
        ids[k] = new TextView(getApplicationContext());
        ids[k].setText(loc_id[k]);
        ids[k].setPadding(30, 15, 30, 15);
        loc[k] = new TextView(getApplicationContext());
        loc[k].setText(loc_name[k]);      
        loc[k].setPadding(30, 15, 30    ,15);
        tr[k].setPadding(0, 1, 0, 0);   
        tr[k].addView(ids[k]);
        tr[k].addView(loc[k]);
      tl.addView(tr[k], new TableLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

}

请帮忙。

【问题讨论】:

  • 您需要将OnClickListner接口添加到您的活动中,然后将所有动态视图添加到setOnClickListner,最后您可以在onClick(View view)方法中捕获所有视图的点击事件。
  • 需要同时点击两个文本视图或只点击一个..??
  • 点击该行时,我想获取 id[k] 的值..请帮忙

标签: android onclicklistener android-tablelayout


【解决方案1】:

您需要将 OnClickListner Interface 添加到您的 Activity 中,然后将所有动态视图添加到 setOnClickListner 中,最后您可以在 onClick(查看视图) 方法。

试试这个

public class MainScreen extends Activity implements OnClickListener {

int i = 10; // input no of row

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);  // set here your layout xml name 

    //TableLayout tl = new TableLayout(MainScreen.this);
        TableLayout tl = (TableLayout) findViewById(R.id.table);
    for (int k = 0; k < i; k++) {

        TableRow tr = new TableRow(MainScreen.this);
        tr.layout(0, 0, 0, 0);
        TextView ids = new TextView(MainScreen.this);
        ids.setText(loc_id[k]);
        ids.setPadding(30, 15, 30, 15);
        TextView loc = new TextView(MainScreen.this);
        loc.setText(loc_name[k]);
        loc.setPadding(30, 15, 30, 15);
        tr.setPadding(0, 1, 0, 0);
        tr.addView(ids);
        tr.addView(loc);
        tr.setId(k); // here you can set unique id to TableRow for
                        // identification
        tr.setOnClickListener(MainScreen.this); // set TableRow onClickListner
        tl.addView(tr, new TableLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

    }

    //setContentView(tl);
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub

    int clicked_id = v.getId(); // here you get id for clicked TableRow

    // now you can get value like this

    String ids = loc_id[clicked_id];
    String loc = loc_name[clicked_id];

}
}

【讨论】:

  • 感谢代码,但抱歉我忘了提及我在新的 CountDownTimer 函数 onfinish 方法中使用了这个函数,所以上面的代码不起作用:( 显示错误。
  • 我认为这是Context 的问题,所以请将this 替换为ActivityNAme.this
  • 是的,它有效 :) 非常感谢。但是缺少滚动选项。我们可以添加滚动选项吗?
  • &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/walb" android:clickable="true"&gt; &lt;TableLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/table" android:background="@drawable/walb" android:stretchColumns="0,1"&gt; &lt;/TableLayout&gt; &lt;/ScrollView&gt; 但是滚动视图不起作用:(
  • 您需要像 TableLayout tl = (TableLayout) findViewById(R.id.table); 一样初始化 TableLayout 并使用您的 xml 文件设置内容视图,请参阅我的更新答案
猜你喜欢
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 2015-06-02
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多