Android get data from Listview and show in a new activity

I am new to Android. I called lv.setOnItemClickListener to pick a selected item from ListView and show the data in a new activity through a new intent. But I don't know the could to do this works. I need some help.

MainActivity

public class MainActivity extends Activity implements
        SearchView.OnQueryTextListener {

    ListView lv;
    SearchView search_view;

    String[] country_names, iso_codes;
    TypedArray country_flags;

    ArrayList<Country> countrylist;
    CustomAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lv = (ListView) findViewById(R.id.list_view);
        search_view = (SearchView) findViewById(R.id.search_view);

        country_names = getResources().getStringArray(R.array.country_names);
        iso_codes = getResources().getStringArray(R.array.iso_Code);
        country_flags = getResources().obtainTypedArray(R.array.country_flags);

        countrylist = new ArrayList<Country>();
        for (int i = 0; i < country_names.length; i++) {
            Country country = new Country(country_names[i], iso_codes[i],
                    country_flags.getResourceId(i, -1));
            countrylist.add(country);
        }

        adapter = new CustomAdapter(getApplicationContext(), countrylist);
        lv.setAdapter(adapter);

        lv.setOnItemClickListener(new OnItemClickListener(){

            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {


      **// I DON'T KNOW WHAT PUT HERE**





            }

        });

        search_view.setOnQueryTextListener(this);
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        adapter.getFilter().filter(newText);
        return false;
    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }

}

Country

public class Country {

    String name;
    int flag;
    String iso_code;

    Country(String name, String iso_code, int flag) {
        this.name = name;
        this.iso_code = iso_code;
        this.flag = flag;
    }

    public String getIso_code() {
        return iso_code;
    }

    public void setIso_code(String iso_code) {
        this.iso_code = iso_code;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getFlag() {
        return flag;
    }

    public void setFlag(int flag) {
        this.flag = flag;
    }

}

Custom Adapter

public class CustomAdapter extends BaseAdapter implements Filterable {

    Context context;
    ArrayList<Country> countrylist;
    ArrayList<Country> mStringFilterList;
    ValueFilter valueFilter;

    CustomAdapter(Context context, ArrayList<Country> countrylist) {
        this.context = context;
        this.countrylist = countrylist;
        mStringFilterList = countrylist;
    }

    @Override
    public int getCount() {
        return countrylist.size();
    }

    @Override
    public Object getItem(int position) {
        return countrylist.get(position);
    }

    @Override
    public long getItemId(int position) {
        return countrylist.indexOf(getItem(position));
    }

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

        LayoutInflater mInflater = (LayoutInflater) context
                .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

        convertView = null;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_item, null);

            TextView name_tv = (TextView) convertView.findViewById(R.id.name);
            TextView iso_tv = (TextView) convertView.findViewById(R.id.code);
            ImageView iv = (ImageView) convertView.findViewById(R.id.flag);

            Country country = countrylist.get(position);

            name_tv.setText(country.getName());
            iso_tv.setText(country.getIso_code());
            iv.setImageResource(country.getFlag());
        }
        return convertView;
    }

    @Override
    public Filter getFilter() {
        if (valueFilter == null) {
            valueFilter = new ValueFilter();
        }
        return valueFilter;
    }

    private class ValueFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();

            if (constraint != null && constraint.length() > 0) {
                ArrayList<Country> filterList = new ArrayList<Country>();
                for (int i = 0; i < mStringFilterList.size(); i++) {
                    if ((mStringFilterList.get(i).getName().toUpperCase())
                            .contains(constraint.toString().toUpperCase())) {

                        Country country = new Country(mStringFilterList.get(i)
                                .getName(), mStringFilterList.get(i)
                                .getIso_code(), mStringFilterList.get(i)
                                .getFlag());

                        filterList.add(country);
                    }
                }
                results.count = filterList.size();
                results.values = filterList;
            } else {
                results.count = mStringFilterList.size();
                results.values = mStringFilterList;
            }
            return results;

        }

        @Override
        protected void publishResults(CharSequence constraint,
                FilterResults results) {
            countrylist = (ArrayList<Country>) results.values;
            notifyDataSetChanged();
        }

    }

}

Upvotes: 0

Views: 207

Answers (3)

Ruchira Randana
Ruchira Randana

Reputation: 4179

Here are the steps.

  1. Get the position of the item clicked: This value will be passed to the method onItemClick
  2. Now put this value as an Intent extra when you try to start the next activity
  3. Read the index of the clicked item from your next Activity
  4. Fetch the contents of the detail activity

Upvotes: 1

Shubham
Shubham

Reputation: 531

Intent intent = new Intent(MainActivity.this,NewActivity.class);
intent.putExtra("Counttry",countrylist.get(arg2));
startActivity(intent);

Upvotes: 0

CodeCody
CodeCody

Reputation: 320

Intent intent=new Intent(getActivity(),StartAnotherActitivity.class);
intent.putExtra(key,value);
startActivity(intent);

http://developer.android.com/reference/android/content/Intent.html

Upvotes: 1

Related Questions