2016-07-11 1 views
-1

Mon code fonctionne correctement lorsqu'il s'agit de cliquer sur des éléments. Mais le problème se pose lorsque j'essaie d'ouvrir des activités après avoir filtré listview. Il ouvre toujours l'activité 1.Comment puis-je ouvrir des activités originales en cliquant sur un élément listview après avoir filtré listview?

Voici mon code source.

navigate.java

public class navigate extends Activity { 

    // Declare Variables 
    ListView list; 
    ListViewAdapter adapter; 
    EditText editsearch; 
    String[] rank; 
    String[] names; 

    int[] flag; 
    ArrayList<Object> arraylist = new ArrayList<Object>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.listview_main); 

     // Generate sample data 
     rank = new String[] { "1", "2", "3", "4", "5","6","7","8","9","10","11"}; 

     names = new String[] { "Animal Bite", "Asthma Attack", "Choking","CPR","Black eye", 
       "Drowning", "Fracture","Heart Attack","Insect Bite","Poisoning","Spinal Injury",}; 


     flag = new int[] { R.drawable.animal, 
       R.drawable.asthma, R.drawable.choke, R.drawable.cpricon, 
       R.drawable.blckeye,R.drawable.drown,R.drawable.fracture,R.drawable.hrtattck,R.drawable.insect,R.drawable.poison,R.drawable.spinal }; 

     // Locate the ListView in listview_main.xml 
     list = (ListView) findViewById(R.id.listview); 

     for (int i = 0; i < rank.length; i++) 
     { 
      Object wp = new Object(rank[i], names[i], flag[i]); 
      // Binds all strings into an array 
      arraylist.add(wp); 
     } 

     // Pass results to ListViewAdapter Class 
     adapter = new ListViewAdapter(this, arraylist); 

     // Binds the Adapter to the ListView 
     list.setAdapter(adapter); 

     // Locate the EditText in listview_main.xml 
     editsearch = (EditText) findViewById(R.id.search); 

     // Capture Text in EditText 
     editsearch.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void afterTextChanged(Editable arg0) { 
       // TODO Auto-generated method stub 
       String text = editsearch.getText().toString().toLowerCase(Locale.getDefault()); 
       adapter.filter(text); 
      } 

      @Override 
      public void beforeTextChanged(CharSequence arg0, int arg1, 
        int arg2, int arg3) { 
       // TODO Auto-generated method stub 
      } 

      @Override 
      public void onTextChanged(CharSequence arg0, int arg1, int arg2, 
        int arg3) { 
       // TODO Auto-generated method stub 
      } 
     }); 
     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(final AdapterView<?> listView, View view, 
            final int position, long id) { 
       switch ((int) adapter.getItemId(position)) { 
        case 0: 
         Intent newActivity = new Intent(navigate.this, animalbite.class); 
         startActivity(newActivity); 
         break; 
        case 1:Intent newActivity1 = new Intent(navigate.this, asthmaattack.class); 
         startActivity(newActivity1); 
         break; 
        case 2:Intent newActivity2 = new Intent(navigate.this, animalbite.class); 
         startActivity(newActivity2); 
         break;} 

      } 
     }); 
    } 


} 

ListViewAdapter.java

public class ListViewAdapter extends BaseAdapter { 

    // Declare Variables 
    Context mContext; 
    LayoutInflater inflater; 
    private List<Object> objectList = null; 
    private ArrayList<Object> arraylist; 

    public ListViewAdapter(Context context, 
      List<Object> objectList) { 
     mContext = context; 

     this.objectList = objectList; 
     inflater = LayoutInflater.from(mContext); 
     this.arraylist = new ArrayList<Object>(); 
     this.arraylist.addAll(objectList); 

    } 



    public class ViewHolder { 
     TextView name; 
     ImageView flag; 
    } 

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

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

public String getCountry(int position){return objectList.get(position).getCountry();} 
    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(final int position, View view, ViewGroup parent) { 
     final ViewHolder holder; 
     if (view == null) { 
      holder = new ViewHolder(); 
      view = inflater.inflate(R.layout.listview_item, null); 
      // Locate the TextViews in listview_item.xml 
      //holder.rank = (TextView) view.findViewById(R.id.rank); 
      holder.name = (TextView) view.findViewById(R.id.name); 

      // Locate the ImageView in listview_item.xml 
      holder.flag = (ImageView) view.findViewById(R.id.flag); 
      view.setTag(holder); 
     } else { 
      holder = (ViewHolder) view.getTag(); 
     } 

     // Set the results into TextViews 
     //holder.rank.setText(objectList.get(position).getRank()); 
     holder.name.setText(objectList.get(position).getCountry()); 
     ; 
     // Set the results into ImageView 
     holder.flag.setImageResource(objectList.get(position) 
       .getFlag()); 

     // Listen for ListView Item Click 
     view.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // Send single item click data to SingleItemView Class 

       // Pass all data rank 

       // Start SingleItemView Class 

       switch (position) { 
        case 0: 
         Intent intent = new Intent(mContext, animalbite.class); 
         mContext.startActivity(intent);break; 
        case 1: 
         Intent i2 = new Intent(mContext, asthmaattack.class); 
         mContext.startActivity(i2);break; 
        case 2: 
         Intent i3 = new Intent(mContext, choking.class); 
         mContext.startActivity(i3);break; 
        case 3: 
         Intent i4 = new Intent(mContext, cpr.class); 
         mContext.startActivity(i4);break; 
        case 4: 
         Intent i5 = new Intent(mContext, lackeye.class); 
         mContext.startActivity(i5);break; 
        case 5: 
         Intent i6 = new Intent(mContext, drowning.class); 
         mContext.startActivity(i6);break; 
        case 6: 
         Intent i7 = new Intent(mContext, Fracture.class); 
         mContext.startActivity(i7);break; 
        case 7: 
         Intent i8 = new Intent(mContext, heartattack.class); 
         mContext.startActivity(i8);break; 
        case 8: 
         Intent i9 = new Intent(mContext, insectbite.class); 
         mContext.startActivity(i9);break; 
        case 9: 
         Intent i10 = new Intent(mContext, poisoning.class); 
         mContext.startActivity(i10);break; 
        case 10: 
         Intent i11 = new Intent(mContext, spinalinjury.class); 
         mContext.startActivity(i11);break; 

       }}}); 

     return view; 
    } 

    // Filter Class 
    public void filter(String charText) { 
     charText = charText.toLowerCase(Locale.getDefault()); 
     objectList.clear(); 
     if (charText.length() == 0) { 
      objectList.addAll(arraylist); 
     } else { 
      for (Object wp : arraylist) { 
       if (wp.getCountry().toLowerCase(Locale.getDefault()) 
         .contains(charText)) { 
        objectList.add(wp); 
       } 
      } 
     } 
     notifyDataSetChanged(); 
    } 

} 

Object.java

public class Object { 
    private String rank; 
    private String country; 
    private int flag; 

    public Object(String rank, String country, 
        int flag) { 
     this.rank = rank; 
     this.country = country; 

     this.flag = flag; 
    } 



    public String getCountry() { 
     return this.country; 
    } 



    public int getFlag() { 
     return this.flag; 
    } 
} 

Comment puis-je ouvrir différentes activités en cliquant sur les éléments de ListView après que je les filtre.

Ceci est l'exemple de code que j'ai utilisé. Bien qu'il ne fournisse pas la fonctionnalité permettant d'ouvrir des activités originales par le biais de l'intention, il ne s'agit que d'une activité falsifiée, alors j'essaie de changer cela. http://www.androidbegin.com/tutorial/android-search-filter-listview-images-and-texts-tutorial/

+0

vous dire la position dans '(int) adapter.getItemId (position)' est le même pour tout filtrage? –

+1

Vous avez vraiment foiré le code. Si vous rencontrez des problèmes avec l'élément listview, cliquez sur "post" uniquement pour afficher le code correspondant à l'élément. Utilisez itemclicklistener pour listview et seulement là implémentez le code approprié pour cliquer, vous avez également défini un clicklistener sur la vue elle-même dans la méthode getview qui est totalement floue. – Juvi

+0

oui, il redirige toujours vers la première activité malgré les cas. @ Mahdi.Pishguy – Nivedita

Répondre

0

Je pense que l'adaptateur a un problème, ce code ci-dessous échantillon de ma demande est prolongée de Filterable et fonctionne très bien

public class AdapterContacts extends BaseAdapter implements Filterable { 

    private LayoutInflater inflater; 
    private Context context; 
    private List<ContactLists> categoryArrayList; 
    private final ArrayList<ContactLists> originalList = new ArrayList<ContactLists>(); 
    private NameFilter filter; 

    public AdapterContacts(ArrayList<ContactLists> array) { 
     categoryArrayList = array; 
    } 

    public AdapterContacts(Context context, List<ContactLists> array) { 
     this.context = context; 
     inflater = LayoutInflater.from(this.context); 
     categoryArrayList = array; 
     originalList.addAll(array); 
    } 

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

    @Override 
    public ContactLists getItem(int position) { 
     return categoryArrayList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

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

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.layout_contacts_list_item, null); 
      mViewHolder = new ViewHolder(convertView); 
      convertView.setTag(mViewHolder); 
     } else { 
      mViewHolder = (ViewHolder) convertView.getTag(); 
     } 

     ContactLists item = getItem(position); 
     mViewHolder.fillItems(this, item, position); 

     return convertView; 
    } 

    private static class UI extends HelperUI { 
     public TextView tv_person_nickname_mobile_number; 
     public TextView btn_invite_message; 
     public ImageView img_contact_image; 
     public ImageView imgv_user_rank; 
     public TextView tv_contact_name; 
     public LinearLayout ll_root; 

     public UI(View view) { 
      parseUi(view); 
     } 
    } 

    private class ViewHolder { 
     private UI UI; 

     public ViewHolder(View view) { 
      UI = new UI(view); 
     } 

     public void fillItems(final AdapterContacts adapter, final ContactLists item, final int position) { 
      UI.tv_contact_name.setText(item.getContact_name()); 

      if (item.getStatus() == 1) { 
       UI.btn_invite_message.setVisibility(View.GONE); 
       UI.imgv_user_rank.setVisibility(View.VISIBLE); 

       if (item.getRank() != null || !TextUtils.isEmpty(item.getRank())) { 
        //Picasso.with(G.context).load(item.getRank()).into(UI.imgv_user_rank); 
       } 

       UI.tv_person_nickname_mobile_number.setText(item.getNick_name()); 
       //UI.ll_root.setBackgroundDrawable(G.context.getResources().getDrawable(R.drawable.selector_button_actions)); 
       if (item.getContact_image() == null || TextUtils.isEmpty(item.getContact_image())) { 
        Bitmap bitmap = UC.getContactPhoto(item.getMobile_number(), G.context.getContentResolver()); 
        if (bitmap != null) { 
         UI.img_contact_image.setImageBitmap(bitmap); 
        } else { 
         UI.img_contact_image.setImageDrawable(G.context.getResources().getDrawable(R.drawable.no_avatar)); 
        } 
       } else { 
        // show user avatar from web 
        //Picasso.with(G.context).load(item.getContact_image()).into(UI.img_contact_image); 
        UI.img_contact_image.setImageBitmap(BitmapFactory.decodeFile(G.DIR_IMAGE + "/" + item.getContact_image())); 
       } 
      } else { 
       // UI.ll_root.setBackgroundDrawable(G.context.getResources().getDrawable(R.drawable.selector_invite_actions)); 
       UI.btn_invite_message.setVisibility(View.VISIBLE); 
       UI.imgv_user_rank.setVisibility(View.GONE); 
       UI.btn_invite_message.setText(UC.getString(R.string.invite_person)); 
       UI.btn_invite_message.setBackgroundDrawable(G.context.getResources().getDrawable(R.drawable.shape_invite_button_default)); 
       UI.tv_person_nickname_mobile_number.setText(item.getMobile_number()); 
       Bitmap bitmap = UC.getContactPhoto(item.getMobile_number(), G.context.getContentResolver()); 
       if (bitmap != null) { 
        UI.img_contact_image.setImageBitmap(bitmap); 
       } else { 
        UI.img_contact_image.setImageDrawable(G.context.getResources().getDrawable(R.drawable.no_avatar)); 
       } 
      } 
     } 
    } 

    @Override 
    public Filter getFilter() { 
     if (filter == null) { 
      filter = new NameFilter(); 
     } 
     return filter; 
    } 

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

      String searchText = constraint.toString().toLowerCase(); 
      ArrayList<ContactLists> newList = filterListBasedOnSearchText(searchText); 
      results.values = newList; 
      results.count = newList.size(); 

      return results; 
     } 

     private ArrayList<ContactLists> filterListBasedOnSearchText(String constraint) { 
      ArrayList<ContactLists> newList = new ArrayList<ContactLists>(); 

      int l = originalList.size(); 
      for (int i = 0; i < l; i++) { 
       ContactLists nameList = originalList.get(i); 

       if (nameList.getContact_name().toString().contains(constraint)) { 
        newList.add(nameList); 
       } 
      } 

      return newList; 
     } 

     @SuppressWarnings("unchecked") 
     @Override 
     protected void publishResults(CharSequence constraint, 
       FilterResults results) { 
      categoryArrayList = (ArrayList<ContactLists>) results.values; 
      notifyDataSetChanged(); 
     } 
    } 
}