2010-05-15 2 views

ответ

7

Существует только один метод startService(). startService() - это метод класса Context, доступный для всех подклассов Context, например Activity или Service.

+0

Почему некоторые используют Context.startService (намерение) вместо того, чтобы просто StartService (намерение)? – mnish

+0

Вы должны были бы спросить их. Это не обязательно. – CommonsWare

+0

см. Мой ответ ниже, чтобы понять, почему и когда мы используем Context @mnish – Nepster

2

Как Commonsware сказал, что существует только один startService(). То есть Context.startService(intent).

Ваша основная деятельность представляет собой экземпляр Context, и вам не нужно объяснять метод (startService) с помощью Context.

Это как вызов метода класса внутри самого класса.

0

Объяснение

Все в Android может знать, как использовать Adapter. Мы можем создать для них отдельный класс. это упростит обработку и понимание нашего кодирования. Но когда мы создаем эти классы отдельно. Им нужен Контекст (Calling on behalf). Поэтому в этом случае мы передаем контекст активности в своем конструкторе. Таким образом, Android знает, что мы называем это от имени какой активности.

Мы не можем назвать

getSystemService(Context...)//blah bhal 

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

context.getSystemService(Context....)// 

Вызов адаптера, как это

ArticleAdapter adapter = new ArticleAdapter(context, list); 

        list_of_article.setAdapter(adapter); 

и получить контекст, как это ..

ArticleAdapter.class

public class ArticleAdapter extends BaseAdapter 
{ 
    Context context; 

    ArrayList<HashMap<String, String>> list; 

    LayoutInflater inflater; 

    public ArticleAdapter(Context context, 
      ArrayList<HashMap<String, String>> list) 
    { 
     this.context = context; 

     this.list = list; 

     inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() 
    { 
     return list.size(); 
    } 

    @Override 
    public Object getItem(int position) 
    { 
     return list.get(position); 
    } 

    @Override 
    public long getItemId(int position) 
    { 
     return position; 
    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     View view = convertView; 

     if (view == null) 
     { 
      view = inflater.inflate(R.layout.item_article, parent, false); 
     } 

     HashMap<String, String> map = list.get(position); 

     TextView Title = (TextView) view.findViewById(R.id.item_title); 

     TextView ByWhom = (TextView) view.findViewById(R.id.item_bywhom); 

     ImageView Img = (ImageView) view.findViewById(R.id.item_img); 

     ProgressBar bar = (ProgressBar) view.findViewById(R.id.progressBar1); 

     TextView TextUnderImg = (TextView) view 
       .findViewById(R.id.item_text_under_imag); 

     TextView Comments = (TextView) view.findViewById(R.id.item_comment); 

     TextView TableView = (TextView) view.findViewById(R.id.item_tableview); 

     TextView ReadMore = (TextView) view.findViewById(R.id.item_readmore); 

     context.getSystemService(Context.CONNECTIVITY_SERVICE);// if you want these service you must have to call it using context. 

     Title.setText(map.get("title")); 

     ByWhom.setText(map.get("publishdate")); 

     return view; 
    } 

} 
+0

Не держитесь за 'Activity' в' AsyncTask'. Если эта активность уничтожена (кнопка BACK, изменение конфигурации и т. Д.), В то время как 'AsyncTask' запущен, теперь' AsyncTask' будет удерживать недопустимое действие. В частности, ** никогда не ссылайтесь на активность из 'doInBackground()', так как активность находится в неопределенном состоянии, пока выполняется фоновый поток. В этом случае 'AsyncTask' должен удерживаться на' LayoutInflater' и 'ConnectivityService'. – CommonsWare

+0

Я понимаю @CommonsWare Но в соответствии с адаптером. У меня есть правильная концепция об использовании его в Adapter – Nepster

+0

Yeesh, мне нужно больше спать. Мои извинения. В этом случае я, вероятно, все равно перейду в «LayoutInflater» и «ConnectivityService», но меня гораздо меньше беспокоят любые проблемы. Опять же, я извиняюсь за свою ошибку. – CommonsWare

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