2016-04-16 20 views
0

私はListViewカスタムアダプターを持っており、アイテムの背景色を変更したいと思います。私はこのコードを使用:カスタムリストの表示アイテムの色変更

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     final Holder holder = new Holder(); 
     final View rowView; 
     rowView = inflater.inflate(R.layout.program_list, null); 
     holder.tv = (TextView) rowView.findViewById(R.id.textView1); 
     holder.img = (ImageView) rowView.findViewById(R.id.imageView1); 
     holder.tv.setText(result[position]); 
     holder.img.setImageResource(imageId[position]); 
     rowView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (position != 0) { 
        rowView.setBackgroundColor(Color.rgb(70, 190, 200)); 
       } 
      } 
     }); 
     return rowView; 
    } 

それは正常に動作しているが、私の質問です - 私は最後の項目は、(境界エラーのうち、原因)押され得ることはありません知ってonclick関数内で、次の項目の色を変更する方法? (4位の項目を押すと、5位の背景色を変更します)。

  rowView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      // ? 
      } 
     }); 

感謝:)

+0

http://stackoverflow.com/questions/16453379/android-list-adapter-returns-wrong-position-in-viewview – sasikumar

答えて

1

あなたは

this.myListView = (ListView) parent; 

として、それを初期化するアダプタで、そしてあなたのgetView方法でメンバ変数としてmyListViewを宣言するなら、あなたは、現在選択の位置を取得しますonClickメソッドのアイテム

int currPos = MyCustomAdapter.this.myListView(getPositionForView((View) view.getParent())); 

これまでは、このコードを自分で使用しています。さて、アンドロイドのJavadocによると、次の式は、次のビュー得なければならない:

MyCustomAdapter.this.myListView(getChildAt(currPos + 1)). 

をあなたは、そのビューで、あなたがやりたいことができるはずですが、私はまだこの部分をテストしていません。