2012-04-20 61 views
1

Infact我有一个列表视图,它有“两个图像+两个Textviews”作为一个项目。更改自定义列表视图项目

我确实想要做的是我想在用户单击图像时更改textview的文本。

public class ListViewCustomAdapter extends BaseAdapter implements OnClickListener{

`ViewHolder holder;` 
`ArrayList<Object> itemList;` 

`public Activity context;` 
`public LayoutInflater inflater;` 

`public ListViewCustomAdapter(Activity context,ArrayList<Object> itemList) {` 
    `super();` 

    `this.context = context;` 
    `this.itemList = itemList;` 

    `this.inflater =` `(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);` 
`}` 

`@Override` 
`public int getCount() {` 
    `// TODO Auto-generated method stub` 
    `return itemList.size();` 
`}` 

`@Override` 
`public Object getItem(int position) {` 
    `// TODO Auto-generated method stub` 
    `return itemList.get(position);` 
`}` 

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

`public static class ViewHolder` 
`{` 
    `ImageView plus;` 
    `ImageView minus;` 
    `TextView question;` 
    `TextView score;` 
`}` 

`@Override` 
`public View getView(int position, View convertView, ViewGroup parent) {` 
    `// TODO Auto-generated method stub` 


    `if(convertView==null)` 
    `{` 
     `holder = new ViewHolder();` 
     `convertView = inflater.inflate(R.layout.listitem_row, null);` 

     `holder.plus = (ImageView) convertView.findViewById(R.id.plus);` 
     `holder.minus = (ImageView) convertView.findViewById(R.id.minus);` 

     `holder.plus.setOnClickListener(this);` 
     `holder.minus.setOnClickListener(this);` 

     `holder.question = (TextView) convertView.findViewById(R.id.question);` 
     `holder.score = (TextView) convertView.findViewById(R.id.score);` 

        `convertView.setTag(holder);` 
    `}` 
    `else` 
     `holder=(ViewHolder)convertView.getTag();` 

    `ItemBean bean = (ItemBean) itemList.get(position);` 

    `holder.minus.setImageResource(bean.getminus());` 
    `holder.plus.setImageResource(bean.getplus());` 
    `holder.question.setText(bean.getquestion());` 
    `holder.score.setText(bean.getscore());` 

    `return convertView;` 
`}` 

`@Override` 
`public void onClick(View v) {` 
    `switch(v.getId()) {` 
     `case R.id.minus:` 
     `{` 

      `int score = Integer.getInteger(holder.score.getText().toString());` 
      `holder.score.setText(Integer.toString(score-1));` 
      `break;` 
     `}` 
     `case R.id.plus:` 
     `{` 

      `int score = Integer.getInteger(holder.score.getText().toString());` 
      `holder.score.setText(Integer.toString(score+1));` 
      `break;` 
     `}` 
    `}}` 

}

我得到空指针异常。 我认为问题在于,程序无法理解它应该针对哪个文本视图,例如此列表视图中有多个项目,并且每个项目都包含此Score Score项目。

Plz帮助我!

+0

粘贴你的logcat – waqaslam 2012-04-20 11:39:08

+0

是点击监听器的问题吗? – waqaslam 2012-04-20 11:42:32

回答

0

不要使用其他替代下面的代码

`if(convertView==null)` 
    `{` 
     `holder = new ViewHolder();` 
     `convertView = inflater.inflate(R.layout.listitem_row, null);` 

     `holder.plus = (ImageView) convertView.findViewById(R.id.plus);` 
     `holder.minus = (ImageView) convertView.findViewById(R.id.minus);` 

     `holder.plus.setOnClickListener(this);` 
     `holder.minus.setOnClickListener(this);` 

     `holder.question = (TextView) convertView.findViewById(R.id.question);` 
     `holder.score = (TextView) convertView.findViewById(R.id.score);` 

        `convertView.setTag(holder);` 
    `} 
     `holder=(ViewHolder)convertView.getTag();` 

    `ItemBean bean = (ItemBean) itemList.get(position);` 

    `holder.minus.setImageResource(bean.getminus());` 
    `holder.plus.setImageResource(bean.getplus());` 
    `holder.question.setText(bean.getquestion());` 
    `holder.score.setText(bean.getscore());` 

    `return convertView;` 
`}` 
+0

它没有任何区别 – waqaslam 2012-04-20 11:41:05

+0

电话我在哪里得到空指针Exceptiom .. – 2012-04-20 11:45:30

+0

添加监听器convertview – 2012-04-20 11:50:25

0

首先,你是不是分配的onClick监听到任何鉴于您的Base适配器。

二,而不是行中使用的onClick事件的看法与我会建议你使用OnItemClickListener您ListLiew。这几乎是直线前进,更好地用于行条目点击

例如:

private OnItemClickListener lstClick = new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

     //do whatever you want here 
    } 
}; 

并将其设置为你的ListView为:

listView.setOnItemClickListener(lstClick); 
+0

OnItemClickListener适用于ListActivity,而我正在开发Activity,而不是... ..非常感谢! – Hina 2012-05-08 04:19:36

+0

OnItemClickListener用于ListView,ListActivity是具有Activity的ListView的派生形式。所以我的建议仍然有效。您可以使用ListView的OnItemClickListener。 – waqaslam 2012-05-08 06:15:02

+0

欲了解更多信息,请阅读[this](http://www.vogella.com/articles/AndroidListView/article.html#listview_overview) – waqaslam 2012-05-08 06:21:44

1

相反convertView.setTag(持有人)的; holder =(ViewHolder)convertView.getTag();` 使用convertView.setId(holder);和holder =(ViewHolder)convertView.getId();

1

谢谢大家。

但我的问题的解决方案是非常简单和smart.I已解决。

我已经使用holder.minus.setTag(持有人)附加持有人;对每一行列表视图的每个项目(按钮/图像视图),然后在该特定按钮/ imageView的Onclick监听器中,我使用了holder =(ViewHolder)v.getTag();使用该特定持有人的ListView控件的该项目:)玩得开心

@覆盖 公共查看getView(INT位置,查看convertView,ViewGroup以及母公司){

 int type = getItemViewType(position); 

     System.out.println("getView " + position + " " + convertView + " type = " + type); 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      switch (type) { 
       case TYPE_ITEM: 
        convertView = mInflater.inflate(R.layout.item, null); 
        holder.score = (TextView)convertView.findViewById(R.id.score); 
        holder.question = (TextView)convertView.findViewById(R.id.question); 
        holder.plus = (ImageView)convertView.findViewById(R.id.plus); 


        holder.minus = (ImageView)convertView.findViewById(R.id.minus); 

holder.plus.setTag(持有者) ; holder.minus。setTag(持有者);

    holder.minus.setOnClickListener(new View.OnClickListener() { 

         @Override 
         public void onClick(View v) { 

          holder = (ViewHolder)v.getTag(); 

          String test =holder.score.getText().toString(); 

        } 
         } 
        }); 


        holder.plus.setOnClickListener(new View.OnClickListener() { 

         @Override 
         public void onClick(View v) { 

          holder = (ViewHolder)v.getTag(); 

          String test =holder.score.getText().toString(); 

                } 
        }); 


        break; 
       case TYPE_SEPARATOR: 

        convertView = mInflater.inflate(R.layout.heading, null); 
        holder.score = (TextView)convertView.findViewById(R.id.textSeparator); 
        holder.score.setText(mData.get(position)); 
        break; 
      } 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder)convertView.getTag(); 
     } 
     switch (type) 
     { 
      case TYPE_ITEM: 

       String temp = mData.get(position); 

       break; 
      case TYPE_SEPARATOR: 

       holder.score.setText(mData.get(position)); 

       break; 
     } 
     return convertView; 
    } 

} 
+0

“TYPE_SEPARATOR”“TYPE_ITEM”您声明该变量 – Prashant09 2013-11-20 09:32:36