2015-07-11 44 views
1

這是我的MainActivity.java其中包含一個Listview如何在Android中創建自定義ListView?

public class MainActivity extends Activity { 

    String maintext[] = { "item 1", "item 2", "item 3", "item 4", "item 5", 
      "item 1", "item 2", "item 3", "item 4", "item 5", "item 1", 
      "item 2", "item 3", "item 4", "item 5" }; 
    String text[] = { "342", "3542", "3523", "23654", "3545", "342", "3542", 
      "3523", "23654", "3545", "342", "3542", "3523", "23654", "3545", 
      "342", "3542", "3523", "23654", "3545" }; 
    ListView list; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     list = (ListView) findViewById(R.id.listView1); 

     CustAdapter adp = new CustAdapter(MainActivity.this, maintext, text); 
     list.setAdapter(adp); 
    } 
} 

這裏是我的CustAdapter適配器類別 它的工作,但是當我滾動到最後一個項目,它顯示了一個空指針錯誤。

public class CustAdapter extends BaseAdapter { 
    Context context; 
    String maintext[]; 
    String text[]; 

    public CustAdapter(Context context, String maintext[], String text[]) { 
     // TODO Auto-generated constructor stub 

     this.context = context; 
     this.maintext = maintext; 
     this.text = text; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return maintext.length; 
    } 

    @Override 
    public Object getItem(int arg0) { 
     // TODO Auto-generated method stub 
     return maintext[arg0]; 
    } 

    @Override 
    public long getItemId(int arg0) { 
     // TODO Auto-generated method stub 
     return arg0; 
    } 


    ImageView imgv; 
    TextView mainText1; 
    TextView text1; 

    @Override 
    public View getView(int arg0, View arg1, ViewGroup arg2) { 
     // TODO Auto-generated method stub 
     if (arg1 == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      arg1 = inflater.inflate(R.layout.listview, null); 

      imgv=(ImageView) arg1.findViewById(R.id.imageView1); 

      mainText1=(TextView) arg1.findViewById(R.id.textView1); 

      text1=(TextView) arg1.findViewById(R.id.textView2); 

      imgv.setBackgroundResource(R.drawable.ic_launcher); 

      mainText1.setText(maintext[arg0]); 

      text1.setText(text[arg0]); 

     } else { 
      arg1 = (View)arg1.getTag(); 
     } 

     return arg1; 
    } 

} 

回答

0

getView() BaseAdapter的應該是這樣的:

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = mLayoutInflater.inflate(R.layout.row_push_notification, null); 
       // bind views 
       holder.txtTitle = (TextView) convertView.findViewById(R.id.txtTitle); 
       holder.txtDateTime = (TextView) convertView.findViewById(R.id.txtDateTime); 

       // set tag 
       convertView.setTag(holder); 
      } else { 
       // get tag 
       holder = (ViewHolder) convertView.getTag(); 
      } 

      holder.txtTitle.setText(your_one_array[position]); 
      holder.txtDateTime.setText(your_two_array[position]); 

     return convertView; 
    } 

ViewHolderBaseAdapter

private class ViewHolder { 
    private TextView txtTitle, txtDateTime; 
} 

希望它能幫助你。

+0

謝謝...它的工作原理 –

+0

@PankajBansal,很高興幫助你兄弟:) –

0

你的mainText []和文本[]的元素不匹配,的mainText對象有15個值,其中作爲文本對象有20個值刪除文本對象5倍的值和嘗試..

+0

好吧,我從文本[]中刪除了5個對象,但仍然是相同的錯誤。 –