如何从GridView itemClick获取对象

时间:2014-01-16 09:43:24

标签: android android-gridview

我有一个名为 countryActivity 的活动和一个名为Country的模型类。我想在模型类中设置值并将每个对象存储在arraylist中,并在gridview中显示对象值。单击项目后,我想要检索对象。以下是我的代码。我哪里出错或该怎么办?帮帮我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(模型类)

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;

} 
}

5 个答案:

答案 0 :(得分:1)

onItemClick方法中,只需执行list2.get(position)即可获得您的国家/地区。

答案 1 :(得分:0)

修复代码

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

答案 2 :(得分:0)

onItemClick的{​​{1}}中,您将获得所点击项目的位置

GridView

Refer this

答案 3 :(得分:0)

(在onItemClick方法中,只需输入:

Country aCountry = countries.get(position);

您肯定会得到一个匹配项,您不需要手动签入列表,因为在网格视图中检索项目时,使用您在适配器中设置的列表的顺序相同。

你应该使用“equals”比较字符串,而不是“==”,使用&amp;&amp;而不是||,因为我想你想要所有条件同时发生并在检查字符串的实际值之前检查null,所以替换:

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

使用:

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

答案 4 :(得分:0)

如果要使用ArrayAdapter显示 name about ,则必须覆盖Country类中的toString方法。

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