我在MainActiviy上有EditText
和ListView
。 EditText
用于搜索和过滤ListView
项。
我有两个阵列;
报纸[]拥有一些报纸名称,地址[]持有报纸的网址。
我也有setOnItemClickListener
。在监听器中,我得到项目的位置,并借助于此索引号的数组,我从adress[ ]
数组中获取地址信息。
首先没有过滤器的搜索框。我在EditText中添加了addTextChangedListener
来过滤ListView的项目。问题从这里开始了!
当我在搜索框中写入内容时,它会正确过滤,但过滤后如果我点击任何项目,则会打开旧项目的地址。
示例:
假设,
A
乙
C
d
是过滤前的项目,数组位置的项目是0,B = 1,C = 2,D = 3
如果我写信给搜索" C"过滤后只有C可见,如果我点击" C"项目它打开了网站。因为" A" item是过滤前的第一项。
如何在过滤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 :(得分:0)
您为报纸和地址使用了两个独立的数组,这就是问题的原因。目前,您只是过滤报纸数组,但地址数组保持不变。这就是为什么你要获得旧物品的地址。你可以采取两种不同的方法来解决这个问题。
公共类MainActivity扩展了Activity {
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);
}
});
}
}