2015-04-08 29 views
0

自從我陷入這個問題以來已經過去了一個星期。 我開發了一個應用程序,使用listVieweditText來進行搜索。當我進行搜索時,新列表顯示得非常好,但是當我點擊該項目時,它將我重定向到內部列表的項目。 我不知道該怎麼做,請幫助我。這些是我的代碼。 - 對於ReaderListAdapterListView在過濾後沒有顯示正確的項目

public class ReaderListAdapter extends BaseAdapter { 
ArrayList<Reader> listReader = new ArrayList<Reader>(); 
ArrayList<Reader> arrayList; 
LayoutInflater layoutInflater; 
Context context; 
int lastPosition = -1; 

// constructeur 
public ReaderListAdapter(Context context, ArrayList<Reader> listReader) { 
    this.listReader = listReader; 
    this.context = context; 
    arrayList = new ArrayList<Reader>();; 
    layoutInflater = LayoutInflater.from(this.context); 
    arrayList.addAll(listReader); 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return listReader.size(); 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return listReader.get(position); 
} 

@Override 
public long getItemId(int arg0) { 
    // TODO Auto-generated method stub 
    return arg0; 
} 

static class ViewHolder { 
    TextView nomView; 
    TextView priceView; 
    ImageView pictureView; 
} 

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

    if (convertView == null) { 
     convertView = layoutInflater.inflate(R.layout.reader_row, null); 
     holder = new ViewHolder(); 
     // initialisation des vues 
     holder.nomView = (TextView) convertView.findViewById(R.id.name); 
     holder.priceView = (TextView) convertView.findViewById(R.id.price); 
     holder.pictureView = (ImageView) convertView.findViewById(R.id.picture); 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    // affchier les données convenablement dans leurs positions 
    holder.nomView.setText(listReader.get(position).getName()); 
    holder.priceView.setText(String.valueOf(listReader.get(position).getPrice())); 
    holder.pictureView.setBackgroundDrawable(listReader.get(position).getPicture()); 

    // changer R.anim.ton_effet 
    Animation animation = AnimationUtils.loadAnimation(context,(position > lastPosition) 
          ? R.anim.up_from_bottom: R.anim.up_from_bottom); 
    convertView.startAnimation(animation); 
    position=lastPosition; 
    return convertView; 
} 

// Filter Class 
public void filter(String charText) { 

    charText = charText.toLowerCase(Locale.getDefault()); 
    listReader.clear(); 
    if(charText.length()==0){ 
     listReader.addAll(arrayList); 
    } 
    else{ 
     for (Reader c : arrayList) { 
      if (c.getName().toLowerCase(Locale.getDefault()) 
        .contains(charText)) { 
       listReader.add(c); 
      } 
     } 
    } 
    notifyDataSetChanged(); 
} 
} 

- 對於MainActivity

public class MainActivity extends Activity { 

String[] listNames = { "kooora","yahoo", "hespress"}; 

int[] listPrices = { 1, 2, 3 }; 

ArrayList<Reader> listReader = new ArrayList<Reader>();; 
ArrayList<Reader> listReaderNew; 
ListView lv; 
EditText search; 
ReaderListAdapter adapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 
    lv = (ListView) findViewById(R.id.listReader); 
    search = (EditText) findViewById(R.id.search); 
    Drawable[] listPictures = {getResources().getDrawable(R.drawable.a1),getResources().getDrawable(R.drawable.a2),getResources().getDrawable(R.drawable.a3)}; 

    for (int i = 0; i < listPictures.length; i++) { 
     listReader.add(new Reader(i + 1, listNames[i], listPictures[i], listPrices[i])); 
    } 

    adapter=new ReaderListAdapter(getApplicationContext(), listReader); 
    lv.setAdapter(adapter); 

    //lv.setAdapter(new ReaderListAdapter(getApplicationContext(), listReader)); 
    search.addTextChangedListener(new TextWatcher() { 
     @Override 
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
      // TODO Auto-generated method stub   
     } 

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

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

     }});  

     lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
     { 
      Intent intent=new Intent(MainActivity.this,WebActivity.class); 

      switch (position) { 
      case 0:     
       intent.setData(Uri.parse("http://www.kooora.com")) ;break;  
      case 1: 
       intent.setData(Uri.parse("http://www.yahoo.com")) ;break;   
      case 2: 
       intent.setData(Uri.parse("http://www.hespress.com")) ;break;    }if (intent != null) { 
        startActivity(intent); 
       }}});}} 

請幫助我。提前致謝!

回答

1

我認爲onItemClick中的代碼是造成這種情況的原因。

問題: searchTerm =「yahoo」 您過濾了yahoo並顯示了雅虎的listitem。讓我們說它在列表中的位置是0.當用戶點擊它時,onItemClick將被調用,並且情況0:將被執行。 正確的邏輯應該是,

Reader reader = parent.getAdapter().getItem(position); 
String searchTerm = reader.getName(); // or whichever is the id for that listitem 

if(searchTerm.contains("yahoo")) { 
    intent.setData(Uri.parse("http://www.yahoo.com")) 
} // and so on 
+0

嘿,這不能與「名」 logique,代碼做,如果我們有2個itemes具有爲例「googleAd」和「googletest」這將COS一probleme。正確的做法是與職位合作。但它不適合我:( –

+0

這就是爲什麼我評論一個id爲listitem。你不能使用職位的原因,我解釋以上。 – brainfreak

+0

什麼ou建議解決這個問題? –

相關問題