2017-02-05 3 views
-1

Я знаю, что в StackOverFlow есть несколько тем, которые задают этот вопрос, но все они отвечают в особых случаях. Никто вообще не отвечает на этот вопрос.
Может ли кто-нибудь сказать, как использовать findViewById в классах без активности?
Для примера в моем случае, если я хочу, чтобы определить WebView:findViewById в классе non-активности

WebView view=(WebView)findViewById(R.id.webview); 

Но я не могу, и я действительно не понимаю, почему андроид делает все complicated.Why вы можете использовать все, что в основной деятельности, но вы можете «т использовать многие из них в не классе активности :(
UPDATE
Я не могу расширить свой класс как деятельность потому что расширяет STH еще
UPDATE
Это класс:.

 class DownloadTask extends AsyncTask<String, Void, Void> { 
    protected Void doInBackground(String... sUrl) { 
     ... 
         WebView view=(WebView)findViewById(R.id.webview); 
         final Snackbar snackbar = Snackbar.make(view,"message",Snackbar.LENGTH_LONG); 
     ... 
    } 
} 

Я собираюсь использовать веб-просмотр в закусочной.

+0

где вы будете показывать ваш 'WebView'? –

+0

@Tahmid Rahman Я обновил свой вопрос. – SAM

+0

Бадди, ты говоришь загадками ... Пожалуйста, покажи код. –

ответ

0

1-в не классе деятельности:

public Context con; 
public NonAct(Activity c){//NonAct = your non activity class name 
    this.con = c; 
} 

//in your class or function do this: 
WebView view=(WebView)con.findViewById(R.id.webview); 

2-называют нон класса активности с отправкой контекста argumant:

NonAct n = new NonAct(YourActivity.this); 
0

попробовать этот

ClassName instance = new ClassName(this); 

и запуск вашего класса будет выглядеть так:

public class ClassName extents to something { 

public Activity activity; 
//.... other attributes 

public ClassName(Activity _activity){ 

    this.activity = _activity; 
//other initializations... 

вы можете использовать findviewby идентификатор, как это

WebView mywebview = (WebView)this.activity.findViewById(R.id.mywebview); 

///// сейчас делают все, и хотят

я надеюсь, что это поможет и.

1

Может ли кто-нибудь сказать, как использовать findViewById в классах без активности?

Передача активности в метод, который вы вызываете в классе, не относящемся к деятельности.

Или передайте действие в конструктор класса неактивности.

Или позвоните по номеру findViewById() и передайте WebView классу non-activity.

Множество других моделей существует. Вам нужно быть осторожным, чтобы вы не пытались использовать эту операцию или WebView дольше, чем вы должны (например, после того, как пользователь поворачивает экран, нажимает BACK или иным образом вызывает уничтожение активности).

Я собираюсь использовать веб-просмотр в закусочной.

Использование Snackbar в порядке.Использовать один из AsyncTask нет, если вы этого не сделаете очень осторожно. В частности:

  • Только попробуйте сделать это с основной поток приложения (то есть, не doInBackground())

  • Убедитесь, что вы регулируете изменения конфигурации, Спина машины и т.п. правильно. В частности, вы не можете показать Snackbar на разрушенном деятельности

+0

Можете ли вы показать мне, как это сделать? – SAM

+0

@SAM: Если я собираюсь использовать 'AsyncTask', я часто использую сохраненный фрагмент, например, в [этом примере приложения] (https://github.com/commonsguy/cw-omnibus/tree/master/Threads/ AsyncTask). В этом примере не отображается использование «Snackbar», но он обновляет фрагмент и показывает «Toast». Использование «AsyncTask» и обновление вашего пользовательского интерфейса на основе его результатов освещено в любой современной книге или курсе по разработке приложений для Android. – CommonsWare

Смежные вопросы