2016-07-11 12 views
-1

Mein Code funktioniert gut, wenn es um das Anklicken von Elementen geht. Aber das Problem tritt auf, wenn ich versuche, nach dem Filtern von Listview Aktivitäten zu öffnen. Es öffnet immer die Aktivität 1.Wie kann ich ursprüngliche Aktivitäten öffnen, indem ich nach dem Filtern der Listenansicht auf ein Listenansichtselement klicke?

Hier ist mein Quellcode.

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

Wie kann ich verschiedene Aktivitäten öffnen, während auf Listenansicht Artikel klicken, nachdem ich sie filtern.

Dies ist der Beispielcode, den ich verwendet habe. Obwohl es nicht die Funktionalität bietet, um originale Aktivitäten durch Absicht zu öffnen, nur einige gefälschte Aktivitäten, also versuche ich das zu ändern. http://www.androidbegin.com/tutorial/android-search-filter-listview-images-and-texts-tutorial/

+0

Sie bedeuten Position in '(int) adapter.getItemId (Position)' ist die gleiche für alle Filter? –

+1

Sie haben wirklich mit dem Code versaut. Wenn Sie Probleme mit dem Listenansichtselement haben, klicken Sie auf, um nur den relevanten Code für das Element zu veröffentlichen. Verwenden Sie itemclicklistener für listview und nur dort implementieren Sie den relevanten Code zum Klicken, Sie haben auch eine clicklistener auf die Ansicht selbst innerhalb der getview-Methode, die völlig unklar ist. – Juvi

+0

ja, es leitet immer die erste Aktivität trotz der Fälle um. @ Mahdi.Pishguy – Nivedita

Antwort

0

Ich denke, Ihr Adapter Problem hat, das unter Beispielcode meiner Anwendung von Filterable verlängert und funktionieren

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