获取~30 EditTexts / SeekBars的参考,并为他们提供个人听众

时间:2017-05-19 19:04:31

标签: android

我对android开发很新,我目前有一个简单的swipe-tablayout,包含5个片段,每个片段都有一个垂直的LinearLayout,大约有20-30个水平LinearLayout,带有TextView,(SeekBar)和EditText /开关。

Layoutsnippet:

    <LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:text="Setting1"
        android:layout_width="0px"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:layout_weight="3"/>

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="0px"
        android:layout_height="wrap_content"
        android:layout_weight="4"
        android:max="50"
        android:progress="25" />

    <Switch
        android:id="@+id/switch1"
        android:layout_width="0px"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:layout_weight="3"/>
</LinearLayout>

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:text="Setting2"
        android:layout_width="0px"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:layout_weight="3"/>

    <SeekBar
        android:id="@+id/seekBar2"
        android:layout_width="0px"
        android:layout_height="wrap_content"
        android:layout_weight="4"
        android:max="50"
        android:layout_gravity="center_vertical"
        android:progress="25" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="0px"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:layout_weight="3"
        android:inputType="numberSigned"/>
</LinearLayout>

有没有比为每个EditText / Seekbar / Switch做“findViewById”更乏味的方法?

另外,我想给所有EditTexts一个FocusChangeListener,所有SeekBars都是一个SeekBarChangeListener,这样EditTexts文本就会反映SeekBar的进度值,而SeekBar会对EditText输入作出反应。

我想避免写作:

    sw1 = (Switch) findViewById(R.id.switch1);
    et1 = (EditText) findViewById(R.id.editText1);
    sb1 = (SeekBar) findViewById(R.id.seekBar2);
    sb1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean 
        fromUser) {
            et1.setText(Integer.toString(progress));
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });
    et1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            sb1.setProgress(Integer.parseInt(et1.getText().toString()));
        }
    });

一遍又一遍。

非常感谢任何帮助! :)

1 个答案:

答案 0 :(得分:0)

您可能需要查看custom views。您可以将逻辑封装到复合视图中并多次重复使用。