Reputation: 740
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
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
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
Reputation: 2664
In the onItemClick
for the GridView
you will get the position of the item you clicked
Country country = countries.get(position);
Upvotes: 0
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
Reputation: 22018
In the onItemClick
method, just do list2.get(position)
and you have your country.
Upvotes: 1