Доступ статически или через параметр? - PullRequest
0 голосов
/ 25 ноября 2011
public class RootActivity extends Activity
{
    static LiLa superLayout;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        main();
        setContentView(superLayout);
    }

    private void main()
    {
        // LiLa is a class which extends LinearLayout
        superLayout = new LiLa(this);

        //DownloadData is an AsyncTask
        DownloadData mDownloadData = new DownloadData(this);
        mDownloadData.execute();
    }
}

Таким образом, AsyncTask меняет некоторые части superLayout, сейчас в AsyncTak я делаю:

RootActivity.superLayout.tv.setText("hello");

Было бы лучше изменить:

static LiLa superLayout;

на

LiLa superLayout;

и:

DownloadData mDownloadData = new DownloadData(this);

на

DownloadData mDownloadData = new DownloadData(this, superLayout);

Чтобы можно было выполнить в AsyncTask:

superLayout.tv.setText("hello");

Так вот вопрос: лучше ли получить доступ к таким параметрам (например, к TextView TV) или к способу изменения этого TextView статическим способом или с помощью параметра?

Спасибо, что читаете меня.

РЕДАКТИРОВАТЬ: кстати, в моем коде это немного более грязно, это может быть больше похоже на

RootActivity.superLayout.class1.class2.tv.setText("hello");

Ответы [ 4 ]

2 голосов
/ 25 ноября 2011

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

Как правило, также рекомендуется объявлять все переменные экземпляра и предоставлять метод получения и / илиметоды установки, если это требуется.

1 голос
/ 25 ноября 2011

Прочитайте часть «Открытое статическое поле / метод» этой ссылки:

http://developer.android.com/resources/faq/framework.html#3

Надеюсь, это поможет.

1 голос
/ 25 ноября 2011

Я думаю, просмотр доступа в параметре лучше .Так что нам не нужно делать какие-либо статические ссылки для класса или деятельности.

1 голос
/ 25 ноября 2011

Я не думаю, что статический доступ к макету - лучший способ сделать это.

Лучшим решением было бы сохранить макет как частную переменную, а затем добавить AsyncTask как внутреннийкласс вашей деятельности:

public class RootActivity extends Activity
{
    private LiLa superLayout;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        main();
        setContentView(superLayout);
    }

    private void main()
    {
        // LiLa is a class which extends LinearLayout
        superLayout = new LiLa(this);

        //DownloadData is an AsyncTask
        new DownloadData().execute();
    }

    private class DownloadData extends AsyncTask<..., ..., ...> {
       //You can reference the variable superLayout here.
       //If you need the context, use RootActivity.this
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...