2013-10-10 25 views
5

私は、画像とテキストでグリッドビューレイアウトを作成しています。うまく機能している項目の複数選択が必要ですが、選択されているグリッド項目を強調したいと思います。選択時にグリッド表示項目を強調表示する方法は?

は、ここに私のコードです:私が選択されるグリッド項目を強調表示するためのコードに追加すべきか

public class FragMent1 extends Fragment{ 

     BaseAdapter MyAdapter; 
    private Context mContext; 

    @SuppressLint("ValidFragment") 
    public FragMent1(Context c) { 
     mContext = c; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     //View view = inflater.inflate(R.layout.g, null); 
     View view = inflater.inflate(R.layout.gridview,null); 
     final GridView listView = (GridView) view.findViewById(R.id.mainGrid); 
     listView.setAdapter(new Adapter()); 
     //listView.setSelection(1); 
     listView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL); 
     listView.setMultiChoiceModeListener(new MultiChoiceModeListener() { 

      @Override 
      public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 
       // TODO Auto-generated method stub 
       return false; 
      } 

      @Override 
      public void onDestroyActionMode(ActionMode mode) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
       // TODO Auto-generated method stub 

       mode.setTitle("Select Items"); 
       mode.setSubtitle("One item selected"); 
       return true; 

      } 

      @Override 
      public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
       // TODO Auto-generated method stub 


       int selectCount = listView.getCheckedItemCount(); 
       switch (selectCount) { 
       case 1: 
        mode.setSubtitle("One item selected"); 

        break; 
       default: 
        mode.setSubtitle("" + selectCount + " items selected"); 

        break; 
       } 

       return true; 
      } 

      @Override 
      public void onItemCheckedStateChanged(ActionMode mode, int position, 
        long id, boolean checked) { 
       // TODO Auto-generated method stub 



       int selectCount = listView.getCheckedItemCount(); 
       switch (selectCount) { 
       case 1: 
        mode.setSubtitle("One item selected"); 
        break; 
       default: 
        mode.setSubtitle("" + selectCount + " items selected"); 
        break; 
       } 

      } 
     }); 


     return view; 
    } 

    private class Adapter extends BaseAdapter { 

     @Override 
     public int getCount() { 
      return mThumbIds.length; 
     } 

     @Override 
     public Object getItem(int position) { 
      return null; 
     } 

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

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

      View myView = convertView; 

      ImageView image; 
      if (convertView == null) { 
       image = new ImageView(FragMent1.this.getActivity()); 
       image.setLayoutParams(new GridView.LayoutParams(85, 85)); 
       image.setScaleType(ImageView.ScaleType.CENTER_CROP); 



       LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
       myView = inflater.inflate(R.layout.grid_items_ontap, null); 


       // Add The Image!!!   
       ImageView iv = (ImageView)myView.findViewById(R.id.grid_item_image_OnTap); 
       iv.setImageResource(mThumbIds[position]); 


       // Add The Text!!! 
       TextView tv = (TextView)myView.findViewById(R.id.grid_item_text_onTap); 
       tv.setText(names[position]); 






      } 
      return myView; 
     } 

     private Integer[] mThumbIds = { 
       R.drawable.car, R.drawable.car, 
       R.drawable.car, R.drawable.car, 
       R.drawable.car,R.drawable.car,R.drawable.car 
     }; 

     private String[] names={"ab","cd","ef","gh","ij","kl","mn"}; 


    } 
} 

どうかしてください。 ありがとうございます。

+0

アダプタでビューを展開すると、Styles.xmlファイルで定義されたスタイルを設定できます。 – Reinherd

+0

私はexpalin me.Iはあなたを取得しませんでした。 – user2835280

+0

http://stackoverflow.com/questions/13080900/listview-normal-and-hover-background-style-in-android – Reinherd

答えて

9

あなたは描画可能なフォルダにアイテム

を強調するために、セレクタを使用することができますxmlファイルを作成

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@color/blue" android:state_selected="true"/> 
    <item android:drawable="@color/transparent"/> 

</selector> 

アンドロイドのようなあなたのGridViewのlistSelectorを設定します。listSelector = "描画可能/ list_selector @"

+1

それは働いているが、私は他の項目を選択したときにその強調表示された項目を保持したい。どの項目が選択されて強調表示される必要があります。 – user2835280

+0

http://stackoverflow.com/questions/19395782/custom-adapter-selected-item-background/19395952#19395952 – kId

+0

私のアプリでは機能しません。私の投稿を見てもらえますか?ありがとう。 http:// stackoverflow。com/questions/28125358/gridview-listselector-does-not-work-as-expected –

1

グリッドビューが相対レイアウト内にある場合は、そこにタッチリスナーを設定して、選択したアイテムをカスタム描画可能(ここにあなたのクラスには、このパラメータを追加し、私は)

private RelativeLayout.OnTouchListener touchListener = new RelativeLayout.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      if(touchEnabled==false) 
       return false; 
      try { 
       if (oldView != null) { 
        oldView.setBackgroundResource(R.color.transparent); 
       } 
       setSelection(((ViewHolder)v.getTag()).pos); 
       v.setBackgroundResource(R.drawable.list_pressed); 
       oldView = v; 
      } catch (Exception e) { 
      } 
      return false; 
     } 
    }; 

を選択を指定するには、9つのパッチ画像を使用するか、あなたにも

5
  1. ImageAdapterクラス
  2. を作成セレクタを使用することができます private int selectedPosition = -1
  3. ImageAdapterクラスにこのメソッドを追加します

  4. 次いでだけテストするために、これらの行を追加ImageAdapterクラスから作成し、これらのラインアクティビティに

    if (position == selectedPosition) { 
         gridView.setBackgroundColor(Color.BLACK); 
        } else { 
         gridView.setBackgroundColor(Color.TRANSPARENT); 
        } 
    
  5. を(またはその断片)ImageAdapterクラスのあなたのGetViewメソッドの末尾にオブジェクトを追加

    GridView gridView = (GridView) view.findViewById(R.id.gridview); 
    gridView.setAdapter(adapterImage); 
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        public void onItemClick(AdapterView<?> parent, View v, 
              int position, long id) { 
         adapterImage.setSelectedPosition(position); 
         adapterImage.notifyDataSetChanged(); 
        } 
    }); 
    
+0

これは正解です – blueware

関連する問題