用于9种不同TextView的相同OnClickListener

时间:2018-02-21 20:11:47

标签: android textview onclicklistener

我有以下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();
    }
});

3 个答案:

答案 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" />