Android 单击自定义listview按钮时启动活动
我正在开发一个调用web服务并将结果加载到列表视图的应用程序。实际上,我的列表视图有两个按钮和一个图像视图。我使用了一个自定义的列表适配器类,它是extends BaseAdapter。现在,我只使用Toast消息来标识列表项[按钮和列表背景]上的单击事件。当我在列表视图中按下一个按钮时,我想开始一个新的活动。我该怎么做?我尝试在onclick侦听器中调用启动活动方法。但是它不起作用 这是我的适配器类Android 单击自定义listview按钮时启动活动,android,listview,Android,Listview,我正在开发一个调用web服务并将结果加载到列表视图的应用程序。实际上,我的列表视图有两个按钮和一个图像视图。我使用了一个自定义的列表适配器类,它是extends BaseAdapter。现在,我只使用Toast消息来标识列表项[按钮和列表背景]上的单击事件。当我在列表视图中按下一个按钮时,我想开始一个新的活动。我该怎么做?我尝试在onclick侦听器中调用启动活动方法。但是它不起作用 这是我的适配器类 public class NewsRowAdapter extends BaseAdapter
public class NewsRowAdapter extends BaseAdapter {
private Context mContext;
public NewsRowAdapter (Context ctx) {
mContext = ctx;
}
private Activity activity;
private static LayoutInflater inflater=null;
private ArrayList<HashMap<String, String>> data;
int resource;
//String response;
//Context context;
//Initialize adapter
public NewsRowAdapter(Activity act, int resource,ArrayList<HashMap<String, String>> d) {
super();
this.resource=resource;
this.data = d;
this.activity = act;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
View vi = convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.row,null);
TextView firstname = (TextView) vi.findViewById(R.id.fname);
TextView lastname = (TextView) vi.findViewById(R.id.lname);
TextView startTime = (TextView) vi.findViewById(R.id.stime);
TextView endTime = (TextView) vi.findViewById(R.id.etime);
TextView date = (TextView) vi.findViewById(R.id.blank);
ImageView img = (ImageView) vi.findViewById(R.id.list_image);
HashMap<String, String> song = new HashMap<String, String>();
song =data.get(position);
firstname.setText(song.get(MainActivity.TAG_PROP_FNAME));
lastname.setText(song.get(MainActivity.TAG_PROP_LNAME));
startTime.setText(song.get(MainActivity.TAG_STIME));
endTime.setText(song.get(MainActivity.TAG_ETIME));
date.setText(song.get(MainActivity.TAG_DATE));
//imageLoader.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL), img);
Button accept = (Button) vi.findViewById(R.id.button1);
accept.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final int x = (int) getItemId(position);
Toast.makeText(parent.getContext(),"you clicked "+ x , Toast.LENGTH_SHORT).show();
//Intent zoom=new Intent(mContext, Profile.class);
//mContext.startActivity(zoom);
//v.getContext().startActivity(zoom);
}
});
vi.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(parent.getContext(), "view clicked: " , Toast.LENGTH_SHORT).show();
Intent intent = new Intent(mContext,Profile.class);
mContext.startActivity(intent);
}
});
return vi;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}
@Override
public Object getItem(int possision) {
// TODO Auto-generated method stub
return possision;
}
@Override
public long getItemId(int possision) {
// TODO Auto-generated method stub
return possision;
}
}
公共类NewsRowAdapter扩展了BaseAdapter{
私有上下文;
公共新闻行适配器(上下文ctx){
mContext=ctx;
}
私人活动;
专用静态充气机=空;
私有数组列表数据;
智力资源;
//字符串响应;
//语境;
//初始化适配器
公共NewsRowAdapter(活动行为、int资源、ArrayList d){
超级();
这个。资源=资源;
这个数据=d;
这个活动=行动;
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
}
@凌驾
公共视图getView(最终整型位置、视图转换视图、最终视图组父视图){
视图vi=转换视图;
if(convertView==null)
vi=充气机充气(右侧布局行,空);
TextView firstname=(TextView)vi.findviewbyd(R.id.fname);
TextView lastname=(TextView)vi.findViewById(R.id.lname);
TextView开始时间=(TextView)vi.findViewById(R.id.stime);
TextView endTime=(TextView)vi.findViewById(R.id.etime);
TextView日期=(TextView)vi.findViewById(R.id.blank);
ImageView img=(ImageView)vi.findViewById(R.id.list\u图像);
HashMap宋=新HashMap();
宋=数据。获取(位置);
firstname.setText(song.get(MainActivity.TAG_PROP_FNAME));
lastname.setText(song.get(MainActivity.TAG_PROP_LNAME));
startTime.setText(song.get(MainActivity.TAG_STIME));
setText(song.get(MainActivity.TAG_ETIME));
date.setText(song.get(MainActivity.TAG_date));
//imageLoader.DisplayImage(song.get(CustomizedListView.KEY\u THUMB\u URL),img);
按钮接受=(按钮)vi.findViewById(R.id.button1);
accept.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
最终整数x=(整数)getItemId(位置);
Toast.makeText(parent.getContext(),“您单击了”+x,Toast.LENGTH\u SHORT.show();
//意图缩放=新意图(mContext,Profile.class);
//mContext.startActivity(缩放);
//v、 getContext().startActivity(缩放);
}
});
vi.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
Toast.makeText(parent.getContext(),“单击视图:”,Toast.LENGTH_SHORT.show();
意向意向=新意向(mContext,Profile.class);
mContext.startActivity(意图);
}
});
返回vi;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回data.size();
}
@凌驾
公共对象getItem(int拥有){
//TODO自动生成的方法存根
返还占有权;
}
@凌驾
公共长getItemId(int拥有){
//TODO自动生成的方法存根
返还占有权;
}
}
堆栈跟踪:
11-27 11:50:20.812: E/AndroidRuntime(3974): FATAL EXCEPTION: main
11-27 11:50:20.812: E/AndroidRuntime(3974): java.lang.NullPointerException
11-27 11:50:20.812: E/AndroidRuntime(3974): at android.content.ComponentName.<init>(ComponentName.java:75)
11-27 11:50:20.812: E/AndroidRuntime(3974): at android.content.Intent.<init>(Intent.java:3301)
11-27 11:50:20.812: E/AndroidRuntime(3974): at com.jsonlist.jsonlist.NewsRowAdapter$2.onClick(NewsRowAdapter.java:103)
11-27 11:50:20.812:E/AndroidRuntime(3974):致命异常:main
11-27 11:50:20.812:E/AndroidRuntime(3974):java.lang.NullPointerException
11-27 11:50:20.812:E/AndroidRuntime(3974):位于android.content.ComponentName.(ComponentName.java:75)
11-27 11:50:20.812:E/AndroidRuntime(3974):在android.content.Intent.(Intent.java:3301)
11-27 11:50:20.812:E/AndroidRuntime(3974):在com.jsonlist.jsonlist.NewsRowAdapter$2.onClick(NewsRowAdapter.java:103)
只需使用此选项即可
Intent zoom=new Intent(parent.getContext(), Profile.class);
parent.getContext().startActivity(zoom);
就用这个吧
Intent zoom=new Intent(parent.getContext(), Profile.class);
parent.getContext().startActivity(zoom);
更改构造函数
public NewsRowAdapter(Context ctx, int resource,ArrayList<HashMap<String, String>> d) {
super();
this.resource=resource;
this.data = d;
this.mContext = ctx;
inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
public NewsRowAdapter (Context ctx) {
mContext = ctx;
}更改构造函数
public NewsRowAdapter(Context ctx, int resource,ArrayList<HashMap<String, String>> d) {
super();
this.resource=resource;
this.data = d;
this.mContext = ctx;
inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
public NewsRowAdapter (Context ctx) {
mContext = ctx;
}请检查您的活动是否在AndridManifest.xml中声明请检查您的活动是否在AndridManifest.xml中声明是的…toast消息显示完美他们可以检查您的应用程序,您调用的此活动是否有条目,我真的看不出代码有问题吗?logcat中有错误吗?是的,我已经把它交给了我的清单…但仍然不起作用…检查一下你的logcat,寻找警告是的…toast消息显示得很好Hey can Check manifiest of you app,你正在调用的这个活动是否有条目,我真的认为代码没有问题?logcat中有错误吗?是的,我已经把它交给了我的清单…但仍然不起作用…检查一下你的logcat,寻找warningshi…再次,我可以根据你的指导进行下一个我想进行的活动。现在,我正在努力创建一个对话框。我已经尝试了很多方法。因为我在一个适配器类中,所以我做不到。你能给我一个实现的方法吗?你想用对话框实现什么,到底是什么问题。Hi@Techfist。为什么这个代码有效而Gishanta的原始代码无效?嗨…我可以根据您的指导继续下一个活动。现在,我正在努力创建一个对话框。我已经尝试了很多方法。因为我在一个适配器类中,所以我做不到。你能给我一个实现的方法吗?你想用对话框实现什么,到底是什么问题。Hi@Techfist。为什么这个代码有效,而Gishanta的原始代码无效?