textview onclicklistener不工作
问题描述:
我在RelativeLayout中有一个manualy createt TextView数组。所有展示除了完美:onclicklistener不行 代码:textview onclicklistener不工作
private RelativeLayout mRLMain;
private TextView [] mTV;
private OnClickListener mTextOnClickListener;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mRLMain = (RelativeLayout) findViewById(R.id.rlMainGame);
mTV = new TextView[20];
mSqueareLayout = new RelativeLayout.LayoutParams(mSquareWidth,mSquareWidth);
for (i = 0; i < 20; i++) {
mTV [i] = new TextView(MainActivity.this);
mTV [i].setBackgroundColor(Color.RED);
mTV [i].setTextColor(Color.WHITE);
mTV [i].setX(i+100);
mTV [i].setId(i);
mTV [i].setOnClickListener(mTextOnClickListener);
mRLMain.addView(mTV [i], mSqueareLayout);
}
mTextOnClickListener = new OnClickListener() {
@Override
public void onClick(View view) { Log.d("XXX","CLICK"); }
};
}
尝试用
mTV [i].setFocusable(false);
mTV [i].setFocusableInTouchMode(false);
mTV [i].setClickable(true);
mTV [i].setDuplicateParentStateEnabled(false);
并没有什么: - 没有错误 - 没有日志的
答
初始化您clickListener
stting之前。所以更改订单可以解决您的问题。
for (i = 0; i < 20; i++) {
mTV [i] = new TextView(MainActivity.this);
mTV [i].setBackgroundColor(Color.RED);
mTV [i].setTextColor(Color.WHITE);
mTV [i].setX(i+100);
mTV [i].setId(i);
// Set clickListener
mTV [i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Log.d("XXX","CLICK");
Toast.makeText(MainActivity.this, "Position "+ i, Toast.LENGTH_LONG).show();
});
mRLMain.addView(mTV [i], mSqueareLayout);
}
答
如果ClickListener将有一些复杂的逻辑,它甚至更好地将其提取到单独的类(内部类,例如)。
// same top part
for (int i = 0; i < 20; i++){
mTV [i] = new TextView(MainActivity.this);
mTV [i].setBackgroundColor(Color.RED);
mTV [i].setTextColor(Color.WHITE);
mTV [i].setX(i+100);
mTV [i].setId(i);
// main change here
mTV [i].setOnClickListener(new CustomClickListener(i));
mRLMain.addView(mTV [i], mSqueareLayout);
}
}
static class CustomClickListener implements View.OnClickListener {
private int viewId;
// another option is to pass a reference to a view here
// private View view;
// in this case, you should create appropriate constructor
public CustomClickListener(int viewId) {
this.viewId = viewId;
}
@Override
public void onClick(View view) {
Log.d("XXX","Click on view " + viewId);
// some logic on this view
}
}
还是什么都没有.... – S2K
检查更新的答案 – Rahul
Yes..Thank的......工作。但为什么我不能用setX的和塞蒂 - 我需要在将来使用它......反正 - 谢谢.... – S2K