所以,我有一个ListView,它显示不同种类的食谱,你可以搜索不同的食谱。我似乎无法弄清楚我是如何为每个食谱(这是一个字符串)分配一个id。我的第一种方法是按照下面的说明进行if / if else,并检查点击的项目。如果它与确切的字符串匹配,则它调用.class,然后显示配方。但这不起作用。
我需要做什么才能分配食谱"产品"我可以在onClickItem中使用的ID吗?
感谢所有帮助。
谢谢。
// List view
private ListView lv;
// Listview Adapter
ArrayAdapter<String> adapter;
// Search EditText
EditText inputSearch;
// ArrayList for Listview
ArrayList<HashMap<String, String>> productList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.side8);
// Listview Data
final String products[] = {"Pasta med kødsovs", "Lakselasagne", "Kyllingelasagne", "Alm. lasagne", "Lakseruller",
"Kyllinge/avocado salat", "Koldskål m. kammerjunker", "Omelet",
"Caesar salat", "Tortilla wraps med kylling", "Frikadeller med kartofler"};
lv = (ListView) findViewById(R.id.list_view);
inputSearch = (EditText) findViewById(R.id.inputSearch);
// Adding items to listview
adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name, products);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
if (products.equals("Pasta med kødsovs")) {
Intent intent = new Intent(Opskrifter.this, OpskriftPasta.class);
startActivity(intent);
finish();
} else if (products.equals("Lakseruller")) {
Intent intent = new Intent(Opskrifter.this, OpskriftLaks.class);
startActivity(intent);
finish();
} else if (products.equals("Omelet")) {
Intent intent = new Intent(Opskrifter.this, OpskriftOmelet.class);
startActivity(intent);
finish();
}
}
}
);
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
Opskrifter.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
}
});
}
}
答案 0 :(得分:0)
你可以通过扩展BaseAdapter来创建自定义适配器你可以在从List中选择一些东西时创建字符串列表使用适配器函数getItem返回你想要的字符串
函数getItem Accpets int position
getItem(int position)
只需使用来自Function onClick的位置
答案 1 :(得分:0)
使用适配器中的位置值创建一个开关盒。
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
switch (position) {
case 0:
//Pasta med kødsovs
Intent intent = new Intent(Opskrifter.this, OpskriftPasta.class);
startActivity(intent);
finish();
break;
case 1:
//Lakseruller
Intent intent = new Intent(Opskrifter.this, OpskriftLaks.class);
startActivity(intent);
finish();
break;
//Add more cases here similarly.
}
});
}
对于搜索功能,请实现自定义适配器。
您可以使用以下字段创建产品类
Class Product{
int id;
String name;
Product(int id, String name){
this.id = id;
this.name = name;
}
public int getID(){
return id;
}
}
ArrayList<Product> products = new Arraylist<Product>();
//Add Products to your arraylist
products.add(new Product(0, "OpskriftPasta"));
products.add(new Product(1, "OpskriftLaks"));
//Add more items similarly.
// In the item click listener of custom adapter,
// use the position to the get the selected Product Object
//OnItemClick
switch(products.get(position).getID())
{
//Write switch case here.
}
答案 2 :(得分:0)
我找到了一种更简单的方法:
创建一个HashMap,如:
final HashMap<String, Class<?>> hm = new HashMap<String, Class<?>>();
然后根据字符串中的顺序将产品放入相应的.class活动:
hm.put(products[0]), TheClass.class);
hm.put(products[1]... etc etc for as many products there is.
这不是'正确'的方式,但它更简单。
最后将其置于
的意图中hm.get(adapter.getItem(posititon));
在.class之后我们进入并开始活动