【问题标题】:Android Listview OnItemClickListenerAndroid Listview OnItemClickListener
【发布时间】:2015-04-06 13:14:52
【问题描述】:

我开始根据以下教程学习如何使用 ListView 进行用户选择 http://www.androidhive.info/2012/09/android-adding-search-functionality-to-listview/ ,但我需要扩展其功能以允许移动用户单击列表并返回编辑文本上的值。不应在 ListView 中查看任何记录。 edittext 中的文本字符串将用于在 SQLITE 数据库中进行 SQL 搜索。

我在帖子中收到了 Agustín 提出的类似问题: Android ListView with onClick items 但我发现很难根据建议的答案成功重写代码。

package com.example.listviewtesting;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class MainActivity extends Activity {

// 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.activity_main);

    // Listview Data
    String products[] = {"Anita Chan Lai Ling Building",
            "Auxiliary Teaching Block",
            "BC Wing",
            "Block L",
            "Block Z",
            "CD Wing",
            "Chan Sui Wai Building",
            "Chan Tai Ho Building",
            "Cheung On Tak Lecture Theatre",
            "Choi Kai Yau Building",
            "Chow Yei Ching Building",
            "Chung Sze Yuen Building",
            "Communal Building",
            "Core A",
            "Core B",
            "Core C",
            "Core D",
            "Core E",
            "Core F",
            "Core G",
            "Core H",
            "Core J",
            "Core P",
            "Core Q",
            "Core R",
            "Core S",
            "Core T",
            "Core U",
            "Fong Shu Chuen Hall",
            "GH Podium Annexe",
            "GH Wing",
            "House of Innovation",
            "Jockey Club Auditorium",
            "Jockey Club Innovation Tower",
            "Kinmay W.Tang Building",
            "Lee Shau Kee Building",
            "Li Ka Shing Tower",
            "Lui Che Woo Building",
            "Mong Man Wai Building",
            "Ng Wing Hong Building",
            "Pao Yue Kong Library",
            "Realink Building",
            "Shaw Amenities Building",
            "Shaw Sports Complex",
            "Shirley Chan Building",
            "Stanley Ho Building",
            "Tang Ping Yuan Building",
            "Yip Kit Chuen Building"};

    lv = (ListView) findViewById(R.id.list_view);
    inputSearch = (EditText) findViewById(R.id.inputSearch);

    // Adding items to listview

    adapter = new ArrayAdapter(this, R.layout.list_item, R.id.product_name, products); 
    lv.setAdapter(adapter);


    /**
     * Enabling Search Filter
     * */

    lv.setOnItemClickListener(new OnItemClickListener(){


        @Override
        public void onItemClick(AdapterView<?>adapter,View v, int position){   
        String selectedProduct = products[position];
        inputSearch.setText(selectedProduct);
        }


        });

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

【问题讨论】:

  • 请提供您迄今为止所做的任何代码。请提供您的适配器类代码。

标签: android sqlite listview android-listview


【解决方案1】:

试试这个:

 // Adding items to listview
    adapter = new ArrayAdapter<String>(this, R.layout.list_item,    R.id.product_name, products);
    lv.setAdapter(adapter);

/**
 * Enabling Search Filter
 * */

//after this
  lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {

@Override
    public void onItemClick(AdapterView<?> parent, View view,int position, long id) {  
    String selectedProduct = lv.getItemAtPosition(position);
    inputSearch.setText(selectedProduct);
    }



});

【讨论】:

  • 感谢您的评论。但我是 Android 编程的初学者,还不熟悉数据结构。如果没有语法错误,我找不到要重写的正确位置。您能否就如何尝试您的代码提供更多说明。
  • 我已根据您的建议更新了我的编码。但是,提示“lv.setOnItemClickListener(new OnItemClickListener(){”行的错误消息带有错误“此行有多个标记 - AdapterView 类型中的方法 setOnItemClickListener(AdapterView.OnItemClickListener) 不适用于参数(新的 OnItemClickListener(){})...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多