我的代码出现语法错误,在“getView”中我想让按钮“update”的监听器移动到另一个活动:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater l = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
View rowView = l.inflate(R.layout.temp, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.textView1);
ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView1);
Button update = (Button) rowView.findViewById(R.id.button1);
// update.setOnClickListener(new View.OnClickListener() {
//
// @Override
// public void onClick(View v) {
//
// Intent redirect = new Intent(getApplicationContext(),Update.class);
// startActivity(redirect);
//
// }
// });
textView.setText(sa.get(position));
return rowView;
}
我试图解决这些关于“意图”的错误,但我失败了:(
方法startActivity(Intent)未定义类型new View.OnClickListener()
方法getApplicationContext()未定义类型new View.OnClickListener()
甚至当我从“onClick”方法移动这些语句时问题没有改变!! 我导入了“Intent”库,如何解决?
答案 0 :(得分:14)
如果您的适配器位于不同的文件中,则需要活动上下文。
您需要将活动上下文从活动类传递给适配器构造函数。
startActivity
是您的活动类的一种方法。因此,您需要活动上下文来启动活动。
而不是getApplicationContext
使用活动上下文。
When to call activity context OR application context?
通过commonsware检查答案。
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent redirect = new Intent(context,Update.class);
context.startActivity(redirect);
}
});
答案 1 :(得分:2)
尝试
final Activity thisActivity = this;
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent redirect = new Intent(thisActivity,Update.class);
thisActivity.startActivity(redirect);
}
});
答案 2 :(得分:2)
对于我这样的问题,这对我有帮助:
@Override
public void onClick(View v) {
Intent intent = new Intent(G.context, SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
G.context.startActivity(intent);
}
});
在G Class中添加上下文:
public class G extends Activity {
public static Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = getApplicationContext();
}
}
答案 3 :(得分:1)
您只需拨打context.startActivity
,即可按照以下步骤进行操作
三个简单的步骤
1)声明局部变量Context mCtx
2)通过将参数传递给构造函数/方法,或者在onCreate方法中,如果在活动中使用上面的代码,则使用Activity上下文初始化它。
3)致电mCtx.startActivity(intent);
或
您可以致电ActivityName.this.startActivity()
编辑: - 作为标准dmon评论,您只需使用本地上下文实例
答案 4 :(得分:0)
问题的根源在于您无法从应用程序上下文启动活动(仅来自您有权这样做的活动上下文)。原因是android将应用程序的所有活动捆绑为一个组(任务),以便允许不同应用程序之间的多任务处理。当你启动一个新的应用程序,或者按下主页按钮时,你的应用程序(连同它的活动backstack)将转到后台并将场景留给一个新任务(使用不同的活动backstack等等等等) )。有关此机制的更多信息,请查看此处(http://developer.android.com/guide/components/tasks-and-back-stack.html)。
为了获得可以从中获取新活动的上下文,您可以通过调用viewgroup.getContext()来获取您正在膨胀的视图的父级的上下文 - 尽管您必须声明viewgroup as final,这是好的,因为你不应该触及父母。
你的getView的草稿:
@Override
public View getView(int position, View convertView, final ViewGroup parent) {
LayoutInflater l = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
View rowView = l.inflate(R.layout.temp, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.textView1);
ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView1);
Button update = (Button) rowView.findViewById(R.id.button1);
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent redirect = new Intent(parent.getContext(),Update.class);
startActivity(redirect);
}
});
textView.setText(sa.get(position));
return rowView;
}