Shaon Hasan
Shaon Hasan

Reputation: 740

How to get the object from GridView itemClick

I have an Activity named countryActivity and a model class named Country. I want to set the values in model class and store each object in arraylist, as well as show the object values in a gridview. When the items will be clicked then i want to retrieve the objects. Below are my codes. Where did i go wrong or what to do? help me out plz?

activity_country.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:paddingBottom="@dimen/activity_vertical_margin"
 android:paddingLeft="@dimen/activity_horizontal_margin"
 android:paddingRight="@dimen/activity_horizontal_margin"
 android:paddingTop="@dimen/activity_vertical_margin"
 tools:context=".CountryActivity" >


 <TextView
    android:id="@+id/nTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="21dp"
    android:layout_marginTop="26dp"
    android:text="Name" />

 <TextView
    android:id="@+id/aTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/nTextView"
    android:layout_below="@+id/nTextView"
    android:layout_marginTop="24dp"
    android:text="About" />

 <EditText
    android:id="@+id/CountryNameEditText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/nTextView"
    android:layout_alignBottom="@+id/nTextView"
    android:layout_marginLeft="48dp"
    android:layout_toRightOf="@+id/nTextView"
    android:ems="10" >

    <requestFocus />
 </EditText>

 <EditText
    android:id="@+id/CountryAboutEditText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/CountryNameEditText"
    android:layout_alignTop="@+id/aTextView"
    android:ems="10" />

<Button
    android:id="@+id/saveCountryButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/CountryAboutEditText"
    android:layout_below="@+id/CountryAboutEditText"
    android:layout_marginLeft="16dp"
    android:layout_marginTop="22dp"
    android:text="Save" 
    android:onClick="saveCountry"
    />

<GridView
    android:id="@+id/countryGridView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/saveCountryButton"
    android:layout_centerHorizontal="true"
    android:numColumns="2">
</GridView>
</RelativeLayout>

CountryActivity.java

 public class CountryActivity extends Activity 
{
ArrayList<Country> countries = new ArrayList<Country>();
Country aCountry;

EditText CountryNameTxtBox;
EditText CountryAboutTxtBox;
GridView countrygGridView;

@Override
protected void onCreate(Bundle savedInstanceState) 
    {
     super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_country);
    // Show the Up button in the action bar.

    CountryNameTxtBox = (EditText)findViewById(R.id.CountryNameEditText);
    CountryAboutTxtBox = (EditText)findViewById(R.id.CountryAboutEditText);
    countrygGridView = (GridView)findViewById(R.id.countryGridView);

}
if((txtName!="" || txtName!=null) &&  (txtAbout!="" || txtAbout != null))
    {
      aCountry = new Country(txtName, txtAbout);
      countries.add(aCountry);
    }

    showGrid();

}


public void showGrid()
{
     ArrayList<Country> list2 = new ArrayList<Country>();

    for(Country arrCountry : countries)
    { 
             list2.add(aCountry);

    } 


      ArrayAdapter<Country> adapter2 = new ArrayAdapter<Country>(this,android.R.layout.simple_list_item_1, list2);
      countrygGridView.setAdapter(adapter2);


 countrygGridView.setOnItemClickListener(new OnItemClickListener()
  {
@Override
public void onItemClick(AdapterView<?> parent, View v,int position, long id) 
    {
     aCountry = (Country) v.getTag();
      for(Country mCountry: countries)
      {
       if(countries.contains(aCountry))
        {
        Toast.makeText(CountryActivity.this, "match", 2000).show();
        }
          }
         }
     });
   }
 }

Country.java (the model class)

public class Country 
{

private String name;
private String about;
    ArrayList<City> cities;

public Country()
{
    cities = new ArrayList<City>();
}

   public Country(String name, String about)
{
    this.name= name;
    this.about = about;
}


public int getNoOfCities()
{
    return cities.size();
}


public long getNoOfCitizens()
{
       Long aPop= 0L;
    for(City aCity: cities)
    {
             aPop += aCity.getPopulation();
    }
    return aPop;
}



public String getName(){
    return name;

} 
public String getAbout(){
    return about;

} 
}

Upvotes: 1

Views: 1886

Answers (5)

Kornel
Kornel

Reputation: 91

If you want to displays name and about using ArrayAdapter, you have to override toString method in Country class.

String toString() {
  return this.name + " " + this.about;
}

Upvotes: 0

Alexe Mihai
Alexe Mihai

Reputation: 36

(In onItemClick method, just put:

Country aCountry = countries.get(position);

You get a match for sure, you don't need to manually check in the list, because the list you set in the adapter is used, in the same order, when retrieving items in your grid view.

You should compare strings by using "equals", not "==", use && instead of ||, because I suppose you want all conditions to happen simultaneously and check for null before checking an actual value of your string, so replace:

if((txtName!="" || txtName!=null) &&  (txtAbout!="" || txtAbout != null))

With:

if(txtName!=null && !txtName.equals("") &&  txtAbout != null && !txtAbout.equals(""))

Upvotes: 0

Jagadesh Seeram
Jagadesh Seeram

Reputation: 2664

In the onItemClick for the GridView you will get the position of the item you clicked

Country country = countries.get(position);

Refer this

Upvotes: 0

Thanh Le
Thanh Le

Reputation: 773

Fix on your code

     countrygGridView.setOnItemClickListener(new OnItemClickListener()
      {
    @Override
    public void onItemClick(AdapterView<?> parent, View v,int position, long id) 
        {
                 Country cnt = (Country)countrygGridView.getAdapter().getItem(position);
         });
       }

Upvotes: 0

fweigl
fweigl

Reputation: 22018

In the onItemClick method, just do list2.get(position) and you have your country.

Upvotes: 1

Related Questions