有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android ListView单击特定页面

所以,我有一个列表视图,它显示不同种类的食谱,你可以搜索不同的食谱。我似乎不明白的是如何为每个菜谱(一个字符串)分配一个id。我的第一种方法是按如下所述执行if/if-else,并检查单击的项目。如果它与精确的字符串匹配,那么它调用。类,该类随后将显示配方。但这是行不通的

我需要做什么才能为配方“产品”分配一个可以在onclick项中使用的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                         
           }
       });

   }

}

共 (3) 个答案

  1. # 1 楼答案

    使用适配器中的位置值创建开关盒

    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. # 2 楼答案

    你可以通过扩展BaseAdapter来创建自定义适配器。当从列表中选择某个内容时,你可以创建字符串列表。使用适配器函数getItem返回你想要的字符串

    函数getItem Accpets int position

    getItem(int position)
    

    只需使用从函数onClick获得的位置

  3. # 3 楼答案

    我想出了一个更简单的方法:

    创建一个HashMap,如下所示:

    final HashMap<String, Class<?>> hm = new HashMap<String, Class<?>>();
    

    然后将产品按顺序放入对应的字符串中。课堂活动:

    hm.put(products[0]), TheClass.class);
    hm.put(products[1]... etc etc for as many products there is.
    

    这不是“正确”的方法,但那样做要简单得多

    最后,把这个放在意图中

    hm.get(adapter.getItem(posititon)); 
    

    之后。我们上课了,开始活动