2

アイテムを複数選択する必要があるグリッド ビューを作成しましたが、長いタップ機能は必要ありません。単一のタップで複数のアイテムを選択できるようにしたいだけです。グリッド ビューはフラグメントの下にあります。

これは私のフラグメントクラスです:

public class FragmentOrder extends Fragment {
    @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 OrderGridViewAdapter(MainActivity.this));
        //int setSelected = 0;
        listView.setSelected(true);

        listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                // TODO Auto-generated method stub

            }
        });
        return view;
    }
}    

これは私のアダプタクラスです:

public class OrderGridViewAdapter extends BaseAdapter{
    private Context MContext;

    public OrderGridViewAdapter(Context C){
        MContext = C;

    }


    @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;


        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,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","","","","","","",""};
 }

任意の提案をいただければ幸いです。ありがとう。

4

1 に答える 1

5

これは、あなたがする必要があることの大まかな解決策です:

1) 現在選択されている項目の位置を含むリストを維持します。

private ArrayList<Integer> mSelected = new ArrayList<Integer>();

アイテムをクリックすると(アイテムを選択)、リストに追加されます。項目をもう一度クリックすると (項目の選択を解除)、リストから削除されます。

    public void onItemSelect(AdapterView<?> parent, View v, int pos, long id) {
        Integer position = new Integer(pos);
        if(mSelected.contains(position)) {
            mSelected.remove(position); // remove item from list
            // update view (v) state here
            // eg: remove highlight
        }
        else {
            mSelected.add(position); // add item to list
            // update view (v) state here
            // eg: add highlight
        } 
    }

2) ビューを更新して、アイテムが選択されているかどうかを表示する必要があります。それを行う場所にコード (+ コメント) を追加します。

3) 最終的に、リストには選択されたすべての項目が含まれます。

上記のコードを配置する場所を示すコードを次に示します。

コード:

public class FragmentOrder extends Fragment {

    @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);
        final OrderGridViewAdapter adapter = new OrderGridViewAdapter(MainActivity.this)
        listView.setAdapter(adapter);
        //int setSelected = 0;
        listView.setSelected(true);

        listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                adapter.onItemSelect(arg0, arg1, arg2, arg3);
            }
        });
        return view;
    }
}

アダプタ:

public class OrderGridViewAdapter extends BaseAdapter{
    private Context MContext;
    private ArrayList<Integer> mSelected = new ArrayList<Integer>();

    public OrderGridViewAdapter(Context C){
        MContext = C;
    }


    @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;
    }

    public void onItemSelect(AdapterView<?> parent, View v, int pos, long id) {
        Integer position = new Integer(pos);
        if(mSelected.contains(position)) {
            mSelected.remove(position);
            // update view (v) state here
            // eg: remove highlight
        }
        else {
            mSelected.add(position);
            // update view (v) state here
            // eg: add highlight
        } 
    }

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


        View myView;


        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] );

        // Set view highlight here, based on if it is selected or not.. 
        if(mSelected.contains(position)) { 
            // update view (v) state here
            // eg: add highlight
        }
        else {
            // update view (v) state here
            // eg: remove highlight
        }


        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,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","","","","","","",""};
 }

更新: ビューを更新するには、ビューのプロパティをプログラムで変更する方法について読む必要があります。たとえば、背景色を変更する場合:

v.setBackgroundColor(Color.parseColor("#000000")); // change to black
于 2013-10-28T11:55:13.363 に答える