我想知道如何解决我目前遇到的问题。让我来解释一下: 我用一些字符串创建了一个ListView。当我点击ListView中的某个项目时,我使用了onItemClick事件来处理我的点击。当我点击鸡尾酒时,它会打开鸡尾酒页面,当我点击甜点时,它会打开甜点页面。为此我使用了数组中字符串的位置。 (所以位置0 =鸡尾酒,位置1 =甜点,等等......)
但是当我使用搜索功能时会出现问题。因为当我搜索'd'时,列表中的第一项将是甜点,当我点击它时会打开鸡尾酒,因为我编写了第0个位置以打开鸡尾酒页面。
有没有办法让我能够不在列表中使用位置,而是将点击引用到字符串。 类似于:if ... ==“cocktail”{Intent i = new Intent(Main.java,Cocktails.java)} ... 这样我就能够将数组中的每个字符串硬编码到某个页面。
这可能吗?如果是的话,你能帮我吗?谢谢!
我目前的代码是:
public class Aperitiefhapjes extends Activity {
private ListView lv; // List view
ArrayAdapter<String> adapter; // Listview Adapter
EditText inputSearch; // Search EditText
ArrayList<HashMap<String, String>> productList; // ArrayList for Listview
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_aperitiefhapjes);
// Listview Data
String products[] = {"cocktails","desserts"};
lv = (ListView) findViewById(R.id.lv_aperitiefhapjes);
inputSearch = (EditText) findViewById(R.id.inputSearch);
// Adding items to listview
adapter = new ArrayAdapter<String>(this, R.layout.searchlist_item, R.id.searchlist_naam, products);
lv.setAdapter(adapter);
// Enabling Search Filter
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
Aperitiefhapjes.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
}
});
registerClickCallback();
}
public void registerClickCallback()
{
ListView list=(ListView)findViewById(R.id.lv_aperitiefhapjes);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id) {
//0 = cocktails
if(position == 0)
{
Intent i = new Intent(Aperitiefhapjes.this, Cocktails.class);
startActivity(i);
}
//1 = desserts
if(position == 1)
{
Intent i = new Intent(Aperitiefhapjes.this, Desserts.class);
startActivity(i);
}
}
});
}
}
我猜这个问题必须在registerClickCallback方法中修复。
答案 0 :(得分:0)
我过去曾使用自定义数组适配器做类似的事情。
public class CustomAdapter extends ArrayAdapter<String> {
}
可以使用“查看持有者”类标记视图。我不会发布很多代码,只是给你一些基本的想法。有资源和示例可供您查看更多相关详细信息。
您将声明一个内部ViewHolder类来封装与listview项相关联的其他数据。
static class ViewHolder {
protected TextView itemNumber;
protected ImageView imageView;
protected TextView text;
protected CheckBox checkbox;
}
'标记'这样的视图
view.setTag(viewHolder);
获取标签数据就像这样
ViewHolder holder = (ViewHolder) view.getTag();
答案 1 :(得分:0)
这里......
public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id)
{
String data=(String)parent.getItemAtPosition(position);
// compare data and set your intents accordingly.
}});