在Android中单击网格项时显示网格项

时间:2014-05-24 09:19:02

标签: android select gridview custom-adapter

我有一个Image Adapter Class,用于在GridView上显示图像

package com.jadco.xpensemanager;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

public class ImageAdapter extends BaseAdapter {

    LayoutInflater layoutinflater;
    Context con;

    public Integer[] mThumbIds = {
            R.drawable.face1, R.drawable.face2,
            R.drawable.face3, R.drawable.face4,
            R.drawable.face5, R.drawable.face6,
            R.drawable.face7, R.drawable.face8,
            R.drawable.face9, R.drawable.face10,
            R.drawable.face11, R.drawable.face12,
            R.drawable.face13, R.drawable.face14,
            R.drawable.face15,R.drawable.face16,
            R.drawable.face17,R.drawable.face18
    };

    public ImageAdapter(Context con) 
    {
        this.con = con;
        layoutinflater = (LayoutInflater) con.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    }

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

    @Override
    public Object getItem(int position) {
        return mThumbIds[position];
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

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

        convertView = layoutinflater.inflate(R.layout.grid_item, null);
        ImageView imageView = (ImageView) convertView.findViewById(R.id.grid_item_image);

        imageView.setImageResource(mThumbIds[position]);

        imageView.setScaleType(ImageView.ScaleType.CENTER);

        return convertView;
    }

}

比我在我的Main类中使用它

adapter = new ImageAdapter(AddToDatabase.this);

        gridView.setAdapter(adapter);

然后我得到像这样的Clicked Image的位置

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v,int position, long id) 
            {
                friendImageId = position;               
            }
        });

网格项Xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/GridItem"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:weightSum="1" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/grid_item_black"
        android:orientation="vertical" 
        >

        <ImageView
            android:id="@+id/grid_item_image"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginTop="8dp" />
    </LinearLayout>

</LinearLayout>

但我无法将其选中....请帮助

使用图像适配器的类是

package com.jadco.xpensemanager;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;

import com.jadco.operations.InsertData;
import com.jadco.operations.UpdateData;
import com.jadco.staticdata.FriendName;
import com.jadco.staticdata.ProjectURL;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.TextView;
import android.widget.Toast;

public class AddToDatabase extends Activity 
{
    Button addData,friendArea,group,settings,individual;
    EditText entityName;
    String totalTransactions;
    String eventId;
    GridView gridView;
    ImageAdapter adapter;
    int friendImageId=-1;
    TextView headerText;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {   
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.add_data);

        findViews();
        onClickEvent();

        adapter = new ImageAdapter(AddToDatabase.this);

        gridView.setAdapter(adapter);
    }

    void onClickEvent()
    {
        Intent z = new Intent();
        z.setAction("com.jadco.xpensemanager.connectivitychange");              
        sendBroadcast(z);

        friendArea.setOnClickListener(new View.OnClickListener() 
        {           
            @Override
            public void onClick(View v) 
            {
                Intent i = new Intent(AddToDatabase.this,MainActivity.class);
                startActivity(i);
                overridePendingTransition(R.anim.right_entry, R.anim.left_exit);
                AddToDatabase.this.finish();
            }
        });
        addData.setOnClickListener(new View.OnClickListener() 
        {           
            @Override
            public void onClick(View v) 
            {       
                String name = entityName.getText().toString().trim();
                if(name.equals(""))
                {
                    Toast.makeText(getApplicationContext(), "Enter Name", Toast.LENGTH_LONG).show();
                }
                else if(friendImageId == -1)
                {
                    Toast.makeText(getApplicationContext(), "Select Image", Toast.LENGTH_LONG).show();
                }
                else
                {
                    Calendar now = Calendar.getInstance();
                    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss",Locale.US); 
                    String nowDate = formatter.format(now.getTime());
                    String[] separateCurrentDate = nowDate.split("-");

                    String year = separateCurrentDate[0];
                    String month = separateCurrentDate[1];
                    String day = separateCurrentDate[2];

                    String[] separateCurrentTime = nowDate.split("-");
                    String hour = separateCurrentTime[3];
                    String minute = separateCurrentTime[4];
                    String seconds = separateCurrentTime[5];

                    String nowTime = hour +"-"+minute+"-"+seconds;
                    /*int currentYear = Integer.parseInt(year);
                        int currentMonth = Integer.parseInt(month);
                        int currentDay = Integer.parseInt(day);*/

                    nowDate = year+"-"+month+"-"+day;

                    int ab;                                             
                    String oldValue = FriendName.returnId("friendList", getApplicationContext());

                    ab = Integer.parseInt(oldValue) +1;                     

                    InsertData.insertIntoFriendList(getApplicationContext(), name, ""+ab, "Mobile", nowDate, nowTime,""+friendImageId);                     
                    InsertData.insertIntoChangeList(getApplicationContext(), "Group", "31", ""+ab, "0", name, nowDate, nowTime, "0", "Insert", "0", "0", "0", "Mobile", "0", "0", "0",""+friendImageId);                        
                    UpdateData.updateIds(getApplicationContext(), ""+ab, "friendList", oldValue);
                    InsertData.insertIntoChangeList(getApplicationContext(), "Group", "38", ""+ab, "0", "friendList", "0", "0", "0", "Update", "0", "0", "0", "0", "0", "0", "0");

                    Intent i = new Intent(AddToDatabase.this,MainActivity.class);
                    startActivity(i);
                    overridePendingTransition(R.anim.right_entry, R.anim.left_exit);
                    AddToDatabase.this.finish();
                }
            }
        });
        group.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) 
            {
                Intent i = new Intent(AddToDatabase.this,EventArea.class);
                startActivity(i);
                overridePendingTransition(R.anim.right_entry, R.anim.left_exit);
                AddToDatabase.this.finish();
            }
        });

        individual.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) 
            {
                Intent i = new Intent(AddToDatabase.this,IndividualCategories.class);
                startActivity(i);
                overridePendingTransition(R.anim.right_entry, R.anim.left_exit);
                AddToDatabase.this.finish();
            }
        });


        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v,int position, long id) 
            {
                friendImageId = position;               
                v.setBackgroundResource(R.drawable.grid_item_alt);
                //Toast.makeText(getApplicationContext(), friendImageId, Toast.LENGTH_LONG).show();
                //gridView.setSelection(position);
                //System.out.println("Id "+friendImageId);
            }
        });

        settings.setOnClickListener(new View.OnClickListener() 
        {           
            @Override
            public void onClick(View v) 
            {   
                ProjectURL.activityNow = MainActivity.class;

                Intent i = new Intent(getApplicationContext(),Settings.class);
                startActivity(i);
                overridePendingTransition(R.anim.right_entry, R.anim.left_exit);
                AddToDatabase.this.finish();
            }
        });




    }
    void findViews()
    {
        addData = (Button) findViewById(R.id.addNewItem);
        friendArea = (Button) findViewById(R.id.friendArea);
        individual = (Button) findViewById(R.id.individualCat);
        group = (Button) findViewById(R.id.groupCat);
        settings = (Button) findViewById(R.id.settings);

        addData.setBackgroundResource(R.drawable.next_unselected);

        entityName = (EditText) findViewById(R.id.entityName);

        gridView = (GridView) findViewById(R.id.grid_view);

        headerText = (TextView) findViewById(R.id.headerText);      
        headerText.setText("Add Friend");
        Typeface typeFace=Typeface.createFromAsset(getAssets(),"fonts/header.TTF");
        headerText.setTypeface(typeFace);       
    }

    @Override
    public void onBackPressed() 
    {
        Intent i = new Intent(getApplicationContext(),MainActivity.class);
        startActivity(i);
        overridePendingTransition(R.anim.left_entry, R.anim.right_exit);
        AddToDatabase.this.finish();
        // TODO Auto-generated method stub
        super.onBackPressed();
    }

}

我的选择器XML

<?xml version="1.0" encoding="utf-8"?>
<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>

3 个答案:

答案 0 :(得分:0)

您可以使用

v

public void onItemClick(AdapterView<?> parent, View v,int position, long id)

访问点击的网格项。然后根据点击状态更改其drawable。

答案 1 :(得分:0)

您没有将元素更改为选定状态..

 just try this  v.setBackgroundColor(Color.Red) 

而不是

 v.setBackgroundResource(R.drawable.grid_item_alt);

注意:要删除先前选择的,您需要遍历所有网格项并更改bg颜色....

答案 2 :(得分:0)

这可能会有所帮助......如果还没有尝试过:

    yourGridView.setSelector(someDrawable);