Перемещение динамических методов TableLayout в отдельный класс - PullRequest
0 голосов
/ 13 февраля 2011

У меня есть действие, которое требует различных условных обновлений для TableLayout (делать / не показывать строки со значением '0', создавать новую позицию ... и т. Д.). У меня Dynamic TableLayout работает прекрасно, но, как вы можете себе представить, перестановки этого продолжают расти. Я хочу переместить различные методы управления TableRow в отдельный класс, но у меня возникли проблемы с переходом.

Первая проблема заключается в том, что когда я пытаюсь вызвать BuildTable.testTable(); из своей основной деятельности, он хочет, чтобы метод был статическим. Это имеет смысл, но когда я делаю testTable статическим, тогда я получаю жалобу "не могу сделать статическую ссылку на нестатический метод findViewById(int) из типа Activity". Казалось, что я подошел очень близко к решению, когда последовал совету здесь , но он просто не совсем сложился. Мне нужна помощь ... и я буду искренне признателен за все, что вы можете предложить.

Я свел его к основам, приведенным ниже, только с одним вставленным TextView ... У меня есть:

public class BuildTable extends Activity {

public void  testTable() {
    TableLayout tl = (TableLayout)findViewById(R.id.InvoiceTable); // Find TableLayout defined in main.xml
        TableRow trDivider = new TableRow(getParent());
            TextView tvDivider = new TextView(getParent()); //Create a divider view between rows
            tvDivider.setText("test");
        trDivider.addView(tvDivider); //Add tvDivider to the new row
    tl.addView(trDivider); //Add trDivider to the TableLayout
}

Ответы [ 3 ]

1 голос
/ 13 февраля 2011

Если вам действительно нужен метод static для этого, просто передайте свой Activity в вызов метода.

public class BuildTable {

    private BuildTable (){
        // private as no need to create an instance
    }

    public static void testTable(Activity contextActivity) {
        TableLayout tl = (TableLayout) contextActivity.findViewById(R.id.InvoiceTable); // Find TableLayout defined in main.xml
        // etc
    }
}

Затем в Activity используйте:

BuildTable.testTable(this);
1 голос
/ 13 февраля 2011

Первая проблема - когда я пытаюсь вызвать BuildTable.testTable ();из моей основной деятельности он хочет, чтобы метод был статическим

Почему вы хотите вызывать эту функцию статически?

Нет необходимости расширять действие, если вы просто хотите разделить некоторые функции.Можно было бы назвать его нестатичным и использовать ссылку на вашу деятельность, например, так: (быстрый ввод, не запускайте его через компилятор, чтобы увидеть, где я ошибся в своем синтаксисе: P)

public class BuildTable { //doesn't need activity
private Activity contextActivity; //here is your activity


public BuildTable(Activity yourContext){     //build a constructor
    contextActivity = yourContext;
}

public void  testTable() {
    TableLayout tl = (TableLayout)contextActivity.findViewById(R.id.InvoiceTable); 
        TableRow trDivider = new TableRow(getParent());
            TextView tvDivider = new TextView(getParent()); 
            tvDivider.setText("test");
        trDivider.addView(tvDivider); //Add tvDivider to the new row
    tl.addView(trDivider); //Add trDivider to the TableLayout
}
0 голосов
/ 13 февраля 2011

Он запрашивает статический метод, потому что вы вызываете его по его классу BuildTable.testTable ();Если вы создадите экземпляр вашего класса BuildTbale, он не обязательно будет статичным.

Итак, в своей основной деятельности вы сказали бы

BuildTable bt = new BuildTable ();bt.testTable (this); .....

Однако, в вашем случае, я думаю, вам просто нужно создать метод, а не новый класс, если вы не собираетесь вызывать его из более чем одного действия илиВы хотите создать более одного экземпляра одного и того же класса.

...