我是Java的初学者,与C语言相比,我不熟悉它的语法。
具体来说,我有以下代码;有2个TextViews
view1, view2
,点击Toast
TextViews
消息
public class MainActivity extends ActionBarActivity {
private TextView view1, view2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view1 = (TextView)findViewById(R.id.item_1a);
view1.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(),"button clicked",Toast.LENGTH_SHORT).show();
}
});
view2 = (TextView)findViewById(R.id.item_1b);
view2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(),"button clicked",Toast.LENGTH_SHORT).show();
}
});
}
}
我意识到,如果有100 TextViews
,如果我继续覆盖onClick
100次,效率会很低。
因此,有没有办法只覆盖onClick
一次,让setOnClickListener
的所有实例都引用回onClick
?
谢谢!
答案 0 :(得分:1)
定义一个按
行实现OnClickListener
的类
class MyClickListener implements OnClickListener{
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(),"button clicked",Toast.LENGTH_SHORT).show();
}
}
然后你可以到处使用同一个类。例如:
// say you have 100 TextViews
for (int i = 0; i < views.length; i++)
views[i].setOnClickListener(new MyClickListener());
答案 1 :(得分:1)
如果是相同的消息,你可以这样做:
public class MainActivity extends ActionBarActivity {
private TextView view1, view2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "button clicked", Toast.LENGTH_SHORT).show();
}
};
view1 = (TextView) findViewById(R.id.item_1a);
view1.setOnClickListener(listener);
view2 = (TextView) findViewById(R.id.item_1b);
view2.setOnClickListener(listener);
}
}
答案 2 :(得分:1)
不确定。您正在实施的内容称为&#34;匿名内部类型&#34;。
OnClickListener listener = new OnClickListener()
{
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(),"button clicked",Toast.LENGTH_SHORT).show();
}
};
view1 = (TextView)findViewById(R.id.item_1a);
view1.setOnClickListener(listener);
view2 = (TextView)findViewById(R.id.item_2a);
view2.setOnClickListener(listener);
或者您可以创建OnClickListener类的子类,例如@webuster answers。
答案 3 :(得分:1)
您可能会影响变量的监听器并将其分配给视图:
OnClickListener listener = new OnClickListener(){
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(),"button clicked",Toast.LENGTH_SHORT).show();
}
};
view1.setOnClickListener(listener);
view2.setOnClickListener(listener);
答案 4 :(得分:1)
您必须在每个View上设置onclicklistener,但有一种更简洁的方法。
将其放入活动代码:
public void myOnclickListener(View v) {
Toast.makeText(v.getContext(),"button clicked",Toast.LENGTH_SHORT).show();
}
然后在xml中设置click侦听器:
<TextView
android:id="@+id/mytext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="myOnclickListener"
/>