2014-05-03 29 views
1

我有一個EditTextListView MainActiviy。 EditText用於搜索和過濾ListView的產品。我有兩個數組;有兩個數組;如何保存舊陣列索引位置後過濾ListView

報紙[]擁有一些報上名,

ADRESS []擁有報紙的網絡ADRESS。我也有一個setOnItemClickListener。在聽衆中,我得到了物品的位置,並且在該索引號的幫助下,我從adress[ ]數組中獲取地址信息。

首先沒有篩選器的搜索框。我向EditText添加了addTextChangedListener以過濾ListView的項目。問題從這裏開始!

當我寫一些東西給搜索框時,它正在過濾正確,但過濾後,如果我點擊任何項目,它會打開舊項目的地址。

實施例:

假設,

Ç

d

是過濾器前項和在陣列位置A項的是0,B = 1,C = 2,D = 3

如果我寫信只搜索「C」C在過濾後可見,如果我點擊「C」項,它會打開A的網站。因爲「A」項目是篩選前的第一項。

如何在過濾ListView後更新數組索引位置?

public class MainActivity extends Activity { 

// Search EditText 
EditText inputSearch; 

// Listview Adapter 
ArrayAdapter<String> adapter; 

protected static final String SITE_ADDRESS = null; 
// protected static final String SITE_NAME = null; 

private ListView newspaper_list_view; 

private String[] newspapers = { "A","B","C","D" }; 

private String[] adress = { "a.com","b.com","c.com","d.com" }; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    // setContentView(R.layout.webview); 

    inputSearch = (EditText) findViewById(R.id.inputSearch); 

    newspaper_list_view = (ListView) findViewById(R.id.gazeteliste); 
    adapter    = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, newspapers); 
    newspaper_list_view.setAdapter(adapter); 

    final Intent intent = new Intent(this, GazeteIcerik.class); 

    newspaper_list_view.setOnItemClickListener(new OnItemClickListener() { 

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

      // Toast.makeText(getApplicationContext(),"Liste Sırası:" + 
      // listposition, Toast.LENGTH_SHORT).show(); 

      String site_adress = adress[listposition]; 
      String site_name = newspapers[listposition]; 

      intent.putExtra(SITE_ADDRESS, site_adress); 
      // intent.putExtra(SITE_NAME, site_name); 
      getActionBar().setDisplayHomeAsUpEnabled(true); 
      intent.putExtra(SITE_ADDRESS, new String[] { site_adress,site_name }); 
      startActivity(intent); 
     } 
    }); 

    inputSearch.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence cs, int arg1, int arg2,int arg3) { 
      // When user changed the Text 
      MainActivity.this.adapter.getFilter().filter(cs); 
     } 

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

} 

// onCreate sonu 

} 

回答

0

您使用的是報紙和地址的兩個獨立的陣列,這就是問題的原因。目前,您只能過濾報紙數組,但地址數組保持不變。這就是爲什麼你會收到舊商品的地址。有兩種不同的方法可以解決這個問題。

  1. (簡單的一種)爲地址創建哈希映射,並使用報紙名稱作爲鍵和地址作爲值,這樣您就可以在任何情況下獲得正確的地址。

公共類MainActivity擴展活動{

HashMap<String, String> addressMap = new HashMap<String, String>(); // initialize the hashmap 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    newspaper_list_view.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> arg0, View arg1, int listposition, long arg3) { 
      String name = newspapers[listposition]; 
      String address = addressMap.get(name); 
     } 
    }); 
    } 
} 
  1. (更復雜,只能選擇,如果你需要更多的功能添加到您的列表視圖),也可以創建一個存儲報紙和地址的自定義對象和一個自定義適配器來過濾列表視圖。
+0

是必要的CustomAdapter與HashMap或我可以實現它ArrayAdapter? – hakiko

+0

使用散列表,選項1,您仍然可以使用ArrayAdapter。 – ayorhan

+0

添加了示例代碼 – ayorhan