Строка таблицы выделяется при прокрутке таблицы

Я хочу, чтобы строки в моей таблице выделялись, когда я их нажимаю. Однако моя реализация этой функции приводит к следующему: когда я прокручиваю таблицу (просто прокручиваю, я не собираюсь нажимать строки таблицы), система интерпретирует это как table-row-press и выделяет строку. Как заставить систему выделять строку только тогда, когда я не прокручиваю таблицу?

Я сделал пример проекта, он состоит из 3 файлов: определения класса, макета XML и файла XML, в котором указано, что делать при нажатии строки таблицы. Они здесь:

Определение класса

    public class RowHighlightTestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TableLayout mainTable=(TableLayout)findViewById(R.id.table);
        Resources r=getResources();
        // We gonna have 25 rows in our table
        for (int i = 0; i < 25; i++) {
            // Set up each row
            TableRow row=new TableRow(this);
            row.setMinimumHeight(60);
            row.setClickable(true);
            row.setBackgroundDrawable(r.getDrawable(R.drawable.table_row));

            // Add a textView to each row to be able to distinguish them
            TextView tv=new TextView(this);
            tv.setText("row " + i);
            row.addView(tv);
            mainTable.addView(row,new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
        }
    }
}

XML-макет: res/layout/main.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scrollbars="none" >

        <TableLayout
            android:id="@+id/table"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >
        </TableLayout>
    </ScrollView>

</LinearLayout>

3-й, res/drawable/table_row.xml, здесь указано, что строки таблицы должны быть белыми по умолчанию и темными при нажатии:

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@android:color/background_light" android:state_focused="false" android:state_pressed="false" android:state_selected="false"/>
    <item android:drawable="@android:color/background_dark" android:state_pressed="true"/>

</selector>

Как заставить систему не выделять строку при прокрутке таблицы?


person Eugene Chumak    schedule 23.12.2011    source источник


Ответы (1)


Возможно, то, как вы пытаетесь это сделать, не является правильным способом.

Почему вы не пытались использовать ListView вместо таблицы внутри ScrollView? Сложная обработка прокрутки/выбора уже выполнена и соответствует вашим потребностям...

person Orabîg    schedule 23.08.2012
comment
Я нашел способ справиться с этим сам, но да, список был бы лучшей альтернативой... - person fabb; 24.08.2012