我有以下9个TextView:
TextView option1 = (TextView) findViewById(R.id.option1);
TextView option2 = (TextView) findViewById(R.id.option2);
TextView option3 = (TextView) findViewById(R.id.option3);
TextView option4 = (TextView) findViewById(R.id.option4);
TextView option5 = (TextView) findViewById(R.id.option5);
TextView option6 = (TextView) findViewById(R.id.option6);
TextView option7 = (TextView) findViewById(R.id.option7);
TextView option8 = (TextView) findViewById(R.id.option8);
TextView option9 = (TextView) findViewById(R.id.option9);
点击后所有人都会做同样的事情。基本上我想要点击每个TextView获取它的文本并显示带有该文本的Toast(现在)。
我为选项1设置了单击侦听器,但必须有一种方法可以创建一个可重用的函数,而不是复制每个TextView的代码...
option1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSelectedOption = option1.getText().toString();
Toast.makeText(MainActivity.this, mSelectedOption, Toast.LENGTH_SHORT).show();
}
});
答案 0 :(得分:1)
您可以为TextViews执行此操作:
from rest_framework.response import Response
def list(self, request, *args, **kwargs):
queryset = self.get_queryset()
serializer = self.get_serializer(queryset, many=True)
response_data = {'custom_field': 'custom value',
'result': serializer.data}
return Response(response_data)
我知道你没有使用按钮,只是用TextView名称替换按钮信息。
您还可以在xml文件中为文本视图定义所有单击侦听器,如下所示:
@Override
public void onCreate(Bundle savedInstanceState) {
button1.setOnClickListener(onClickListener);
button2.setOnClickListener(onClickListener);
button3.setOnClickListener(onClickListener);
}
private OnClickListener onClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button1:
//DO something
break;
case R.id.button2:
//DO something
break;
case R.id.button3:
//DO something
break;
}
}
};
然后,您可以创建一个名为textViewOnClick的方法,该方法使用switch语句:
<TextView android:id="@+id/textView"
android:layout_width="wrap_content"
android:onClick="textViewOnClick"
android:layout_height="wrap_content"
android:text="Random TextView" />
答案 1 :(得分:1)
不需要switch
声明。您只需将Map
资源ID用于TextView
s:
public class MainActivity extends AppCompatActivity {
private static final int[] IDS = {
R.id.option1, R.id.option2, R.id.option3, R.id.option4, R.id.option5, R.id.option6, R.id.option7, R.id.option8, R.id.option9
};
private View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
mSelectedOption = mOptions.get(v.getId()).getText().toString();
Toast.makeText(MainActivity.this, mSelectedOption, Toast.LENGTH_SHORT).show();
}
};
private final Map<Integer, TextView> mOptions = new HashMap();
private String mSelectedOption;
private void initOptions() {
for (int id : IDS ) {
TextView option = (TextView) findViewById(id);
option.setOnClickListener(onClickListener);
mOptions.put(id, option);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
.
.
.
initOptions();
}
}
答案 2 :(得分:0)
您可以从根视图中获取所有视图
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View v = findViewById(R.id.root);
for(int index = 0; index<((ViewGroup)v).getChildCount(); ++index) {
View nextChild = ((ViewGroup)v).getChildAt(index);
nextChild.setOnClickListener(listener);
}
}
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.id1:{
}
case R.id.id2:{
}
}
}
};
}
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="vb.com.broadcaster.MainActivity">
<TextView
android:id="@+id/id1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/id2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />