2016-08-30 15 views
0

私はGridviewを持っています。特定の要素を押したときに背景を塗りたいです。GridViewから選択した項目を強調表示しようとしています

私は、gridview要素をdinamicallyロードするためのアダプタを持っています。そして、私はそのアダプタにリスナーを持っています。 そのリスナーでは、私は、私が望む色で背景を置くが、それはまた、リストの下の別の要素を塗りつぶす(私は、同じ位置のものを、ビューがリロードされた後に推測する)。

重要:私の最低APIは9で、私はそれを実際に変更することはできません。ここ

は、(アダプタから)私のGetViewメソッドのコードである:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    viewHolder = null; 
    if (convertView == null) { 

     viewHolder=new ViewHolder(); 

     LayoutInflater layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view=layoutInflater.inflate(R.layout.highwayappselectionitem,parent, false); 

     viewHolder.appImageIcon=(ImageView) view.findViewById(R.id.highwayGridViewItemIcon); 
     viewHolder.appNameLabel=(TextView) view.findViewById(R.id.highwayGridViewItemName); 
     viewHolder.appInfoButton = (ImageView) view.findViewById(R.id.highwayGridViewItemInfoButton); 
     viewHolder.linearLayout = (LinearLayout) view.findViewById(R.id.HighwayGridViewItem); 

    }else{ 
     view= convertView; 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 


    viewHolder.appNameLabel.setText(appsList.get(position).getAppName()); 
    viewHolder.appImageIcon.setImageDrawable(appsList.get(position).getImageIcon()); 


    view.setTag(viewHolder); 

    viewHolder.linearLayout.setOnClickListener(new MyOnClickListener(position,0)); 

    return view; 
} 

、ここでのLinearLayoutのリスナーである(すなわち、各項目を表す):

public void onClick(View v) { 

     if(selectedView==0 || selectedView==1){ 

      appName=appsList.get(position).getAppName(); 
      filePath=appsList.get(position).getFilePath(); 
      appLogo=appsList.get(position).getImageIcon(); 

      v.setBackgroundColor(activity.getResources().getColor(R.color.light_grey));   

      System.out.println("Just pressed the app ... "+appName); 
      System.out.println("His filePath is ... "+filePath); 

      HighwayGridViewAppItem tmpSelectedItem= new HighwayGridViewAppItem(appLogo, appName, filePath); 
      selectedAppsList.add(tmpSelectedItem); 

      System.out.println("AppSelectionCUstomAdapter : Added a new application to the list of selected apps .!!!!!!!!!!!!!!!........."); 
      System.out.println("AppselectioncustomAdaptaer : The size of the selectedAppsList is now : "+selectedAppsList.size()); 

     }else{ 
      //pressed the info button 
      System.out.println("This will be implemented later, need access to the webservices"); 
     } 
    } 
} 

は、IFを無視します(選択されたビュー== 0または== 1それはもう使用されていない、私はそれを削除することができます...)。

また、appsLIstは私のカスタムクラスのアイテムのリストです。そこには、それが選択されているかどうかを表すブール値属性があります。

される何が起こっているのか、このGridViewの想像:

ABC DEF


GHIをJKLが

灰色の線は、スクロールを表し

...場合それらの新しい要素が表示されます。 Bを押すとBが選択されますが、Hも選択されます

私は研究を試みましたが、私が見つけた問題は同じではありませんでした。

何かが役立つかもしれません..繰り返されるelemetnを追加するためにgridviewが使用されていましたので、要素をgridviewに追加すると、要素のリストにすでに類似の要素があるかどうかを確認します。

答えて

1

選択後、グリッドビューの項目を選択したままにしたい場合は、この行を追加する必要があります。

((BaseAdapter) gridView.getAdapter()).notifyDataSetChanged(); 

編集私はあなたが重複した値を得ている理由ですGetViewメソッドに問題があると思う:

public View getView(int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
    if (view== null) { // if it's not recycled, initialize some attributes 
     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.highwayappselectionitem, parent, false); 
    } 

}

+0

は、しかし、問題は、私は変化にやっているということですリスナー、それはアダプタクラス(それはネストされたクラスです)の中にあるので、私はそこにあるgridviewへのアクセスを持っていません –

+0

変更を加えた後、単純に 'notifyDataSetChanged();'を使います。 –

+0

はい、私はすでにnotifiyDataSetChanged()を入れました。別の(主な)別の問題は、そうしてはならないいくつかのアイコンを描いているということです。 –

関連する問題