所以我只是试图在我的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(),我不明白为什么:(
答案 0 :(得分:9)
你在类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 */
答案 1 :(得分:0)
getContext()不是BaseAdapter上的方法。将构造函数中给出的上下文存储在成员变量中,然后使用它。
答案 2 :(得分:0)
您正在使用BaseAdapter
,因此无法使用
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
如果是ArrayAdapter
,您可以按如下方式使用它:
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
将Context
作为参数传递给内部类,然后在需要的地方使用它。
答案 3 :(得分:0)
如果您不需要从其他活动访问BaseAdapter,可以使用Alarm_Settings.this替换getContext()