getContext (). Ошибка getSystemService - PullRequest
4 голосов
/ 13 июля 2011

Так что я просто пытаюсь в настоящее время надуть представление в моей функции getView, и getContext () по какой-то причине говорит, что он не определен ..

package com.MTSUAndroid;

import com.MTSUAndroid.Alarm_Settings.EfficientAdapter1.ViewHolder;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.ImageView;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap;

public class Alarm_Settings extends ListActivity {
    public static class EfficientAdapter1 extends BaseAdapter{
        private LayoutInflater mInflater;

        public EfficientAdapter1(Context context){
            mInflater = LayoutInflater.from(context);
        }
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            int viewType = this.getItemViewType(position);

            switch (viewType)
            {
            case 1:
                holder = new ViewHolder();

                View v = convertView;
                if (v == null)
                {
                    LayoutInflater vi = null;
                    //LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v = vi.inflate(R.layout.alerts,parent,false);

                    holder.text1 = (TextView)v.findViewById(R.id.menu_Cancel);
                    v.setTag(holder);
                }
                else {
                    holder = (ViewHolder)v.getTag();
                }
                return v;
            case 2:
                ViewHolder holder1 = new ViewHolder();

                View v1 = convertView;
                if (v1 == null)
                {
                    LayoutInflater vi = null;
                    //LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v1 = vi.inflate(R.layout.about, parent, false);

                    holder1.text1 = (TextView)v1.findViewById(R.id.menu_Cancel);
                    v1.setTag(holder1);
                }
                else {
                    holder1 = (ViewHolder)v1.getTag();
                }

                return v1;
            }
            return null;
        }

        static class ViewHolder{
            TextView text1;
        }

    }
    public void onCreate(Bundle SavedInstanceState)
    {
        super.onCreate(SavedInstanceState);
        setListAdapter(new EfficientAdapter1(this));
        ListView listview = getListView();
        listview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Intent intent = new Intent(Alarm_Settings.this, Alerts.class);
                startActivity(intent);
            }
        });
    }
}

Это часть кода, которую я имеюпроблемы с.LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); getContext () не определен для класса, и я не понимаю, почему: (

Ответы [ 4 ]

9 голосов
/ 13 июля 2011

Вы вызываете его в классе EfficientAdapter1, который не расширяет активность и не имеет такого метода.

Добавить поле Context во внутренний класс и вызвать на нем getSystemService:

/* snip */
public static class EfficientAdapter1 extends BaseAdapter{
    private LayoutInflater mInflater;
    private Context ctx;
    public EfficientAdapter1(Context context){
        mInflater = LayoutInflater.from(context);
        ctx = context;
    }
/* snip */
     LayoutInflater vi = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
/* snip */
0 голосов
/ 13 июля 2011

Если вам не нужен доступ к BaseAdapter из других действий, вы можете заменить getContext () на Alarm_Settings.this

0 голосов
/ 13 июля 2011

Вы используете BaseAdapter, поэтому вы не можете использовать

getSystemService(Context.LAYOUT_INFLATER_SERVICE);

. В случае ArrayAdapter вы можете использовать его следующим образом:

LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

Pass Context какпараметр в вашем внутреннем классе, а затем используйте его там, где вам нужно.

0 голосов
/ 13 июля 2011

getContext () не является методом в BaseAdapter. Сохраните предоставленный вам контекст в конструкторе в переменной-члене и просто используйте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...