2016-04-30 19 views
0

私はAndroidが初めてです。 lv.setOnItemClickListenerと呼んで、ListViewから選択した項目を選択し、新しいインテントを通して新しいアクティビティにデータを表示しました。しかし、私はこれをすることはできないのか分かりません。助けが必要です。Androidはリストビューからデータを取得し、新しいアクティビティで表示します

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; 
    } 

} 

パブリッククラス国{

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; 
    } 

} 

カスタム・アダプタ

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(); 
     } 

    } 

} 

答えて

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

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

+0

方法putExtraの内容を取得しますブール型)インテントは引数には適用されません(String、Country) –

+0

オブジェクト全体を渡す場合は、そのオブジェクトがシリアライズ可能または解析可能なインターフェイスを実装する必要があります。 http://www.3pillarglobal.com/insights/parcelable-vs-java-serialization-in-android-app-development私が以前に行ったことは、アクティビティやフラグメント間で同じデータを使用する必要があるときにシングルトンを使用することでした。シングルトンにはCountryオブジェクトを格納するArrayListがあるので、アプリケーションのどこにいてもデータを取得できます。 – CodeCody

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

手順です。

  1. アイテムの位置がクリックされた取得:この値は、次のactivity
  2. がクリックされたのindexを読む起動しようとする今、Intent extraとしてこの値を入れる方法onItemClick
  3. に渡されますアイテムは、あなたの次のActivity
  4. から、(文字列を詳しくactivity
関連する問題