2012-04-20 62 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