Android 从自定义列表视图启动活动

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);

我正在尝试从自定义lisview启动活动。我已经通过创建一个新的意图来使用onItemclick方法并调用该类

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]);  
可能导致这种情况的一些因素:

  • 标题数组可能为空。我认为,如果仅仅是
    position
    参数太大,您就会得到ArrayIndexOutOfBoundsException
  • holder
    实例的
    txtViewTitle
    成员是
    null
    ,可能是因为第59行中的id
    R.id.appname
    不正确
您可以通过在调试器的第69行上放置断点并检查
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;
}