Android 从自定义列表视图启动活动
我正在尝试从自定义lisview启动活动。我已经通过创建一个新的意图来使用onItemclick方法并调用该类Android 从自定义列表视图启动活动,android,android-layout,android-intent,android-listview,Android,Android Layout,Android Intent,Android Listview,我正在尝试从自定义lisview启动活动。我已经通过创建一个新的意图来使用onItemclick方法并调用该类 public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { if (position == 0) { Intent i = new Intent(getApplicationContext(), InstalledApps.class);
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
if (position == 0) {
Intent i = new Intent(getApplicationContext(), InstalledApps.class);
startActivity(i);
}
}
请让我知道我做错了什么
适配器类
package com.sliit.droidman.thirdpartyapplist;
import com.sliit.droidman.R;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class ListViewAdapter extends BaseAdapter
{
Activity context;
String title[];
String description[];
Drawable icon[];
public ListViewAdapter(Activity context, String[] title, String[] description , Drawable[] ico) {
super();
this.context = context;
this.title = title;
this.description = description;
this.icon = ico;
}
public int getCount() {
// TODO Auto-generated method stub
return title.length;
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
private class ViewHolder {
TextView txtViewTitle;
TextView txtViewDescription;
ImageView image;
}
public View getView(int position, View convertView, ViewGroup parent)
{
// TODO Auto-generated method stub
ViewHolder holder;
LayoutInflater inflater = context.getLayoutInflater();
if (convertView == null)
{
convertView = inflater.inflate(R.layout.listitem_row, null);
holder = new ViewHolder();
holder.txtViewTitle = (TextView) convertView.findViewById(R.id.appname);
holder.txtViewDescription = (TextView) convertView.findViewById(R.id.packagename);
holder.image = (ImageView) convertView.findViewById(R.id.avatar);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.txtViewTitle.setText(title[position]);
holder.txtViewDescription.setText(description[position]);
holder.image.setImageDrawable(icon[position]);
return convertView;
}
}
07-05 04:39:52.758:E/AndroidRuntime(3189):在com.slit.droidman.thirdpartyaapplist.ListViewAdapter.getView(ListViewAdapter.java:69)
在com.slit.droidman.ThirdPartyApplication.ListViewAdapter
的getView
方法的第69行有一个空指针。找出导致空指针的原因并确保它不会发生
第69行似乎如下所示
holder.txtViewTitle.setText(title[position]);
可能导致这种情况的一些因素:
- 标题数组可能为空。我认为,如果仅仅是
参数太大,您就会得到ArrayIndexOutOfBoundsExceptionposition
实例的holder
成员是txtViewTitle
,可能是因为第59行中的idnull
不正确R.id.appname
holder.txtViewTitle
和title
的值来解决此问题。请尝试以下操作:
package com.sliit.droidman.thirdpartyapplist;
import com.sliit.droidman.R;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class ListViewAdapter extends BaseAdapter
{
Activity context;
String title[];
String description[];
Drawable icon[];
public ListViewAdapter(Activity context, String[] title, String[] description , Drawable[] ico) {
super();
this.context = context;
this.title = title;
this.description = description;
this.icon = ico;
}
public int getCount() {
// TODO Auto-generated method stub
return title.length;
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
//You have to overide the getView method
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
//added row, to convert view
View row = convertView;
ViewHolder holder;
if (convertView == null)
{
//added casting to the context
LayoutInflater inflater = ((Activity)this.context).getLayoutInflater();
//made changes here
row = inflater.inflate(R.layout.listitem_row, parent, false);
holder = new ViewHolder();
holder.txtViewTitle = (TextView) convertView.findViewById(R.id.appname);
holder.txtViewDescription = (TextView) convertView.findViewById(R.id.packagename);
holder.image = (ImageView) convertView.findViewById(R.id.avatar);
row.setTag(holder);
}
else
{ //added row
holder = (ViewHolder) row.getTag();
}
holder.txtViewTitle.setText(title[position]);
holder.txtViewDescription.setText(description[position]);
holder.image.setImageDrawable(icon[position]);
//changed to row
return row;
}
}
static class ViewHolder {
TextView txtViewTitle;
TextView txtViewDescription;
ImageView image;
}
基本上,我在listadapter的类之外创建了一个静态ViewHolder类,并做了一些其他小更改,包括重写getView方法。我在做更改的地方留下了评论。让我知道这是否有效!希望这有帮助 发布您的getView(ListViewAdapter.java:69)方法和类..我添加了它!nd我看不出适配器类中有错误!:(请指定给出异常的确切代码行,这将使问题更加清楚。与上面的答案一样,这实际上并没有回答用户的问题。您应该发表评论,试图找出该代码行上的确切内容,然后尝试帮助修复它。)。
package com.sliit.droidman.thirdpartyapplist;
import com.sliit.droidman.R;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class ListViewAdapter extends BaseAdapter
{
Activity context;
String title[];
String description[];
Drawable icon[];
public ListViewAdapter(Activity context, String[] title, String[] description , Drawable[] ico) {
super();
this.context = context;
this.title = title;
this.description = description;
this.icon = ico;
}
public int getCount() {
// TODO Auto-generated method stub
return title.length;
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
//You have to overide the getView method
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
//added row, to convert view
View row = convertView;
ViewHolder holder;
if (convertView == null)
{
//added casting to the context
LayoutInflater inflater = ((Activity)this.context).getLayoutInflater();
//made changes here
row = inflater.inflate(R.layout.listitem_row, parent, false);
holder = new ViewHolder();
holder.txtViewTitle = (TextView) convertView.findViewById(R.id.appname);
holder.txtViewDescription = (TextView) convertView.findViewById(R.id.packagename);
holder.image = (ImageView) convertView.findViewById(R.id.avatar);
row.setTag(holder);
}
else
{ //added row
holder = (ViewHolder) row.getTag();
}
holder.txtViewTitle.setText(title[position]);
holder.txtViewDescription.setText(description[position]);
holder.image.setImageDrawable(icon[position]);
//changed to row
return row;
}
}
static class ViewHolder {
TextView txtViewTitle;
TextView txtViewDescription;
ImageView image;
}