0

私は、データが XML から読み取られるアプリで作業しており、データに基づいて ListView を作成し、ListView の任意の項目をクリックすると、詳細を含む別のアクティビティが開きます。ListView に検索機能を実装しようとしています。以下は私のコードです。検索を実装する方法がわかりません。多くの方法を試しましたが、どれも機能しませんでした。どんな助けでも大歓迎です。前もって感謝します。

public class BrowseActors extends Activity {
    private static final String TAG = "QuizListActivity";
    private ImageView bannerImageView; // displays a Image
    // Search EditText
    private EditText inputSearch;
    // XML node keys
    static final String KEY_TAG = "ActorData"; // parent node
    static final String KEY_ID = "id";
    static final String KEY_NAME = "name";
    static final String KEY_ICON = "icon";

    String position;
    String sourceFile;
    // List items
    ListView list;
    //BinderActorData adapter = null;
    List<HashMap<String, String>> actorDataCollection;
    ArrayAdapter<HashMap<String, String>> adapter;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE); // Remove title
        setContentView(R.layout.browse_actor);
        bannerImageView = (ImageView) findViewById(R.id.topImageView);
        try {
            // Get Category to filter
            Intent in = getIntent();
            this.position = in.getStringExtra("position");
            sourceFile="BaseData.xml"
            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
            Document doc = docBuilder.parse(getAssets().open(sourceFile));

            actorDataCollection = new ArrayList<HashMap<String, String>>();

            // normalize text representation
            doc.getDocumentElement().normalize();

            NodeList quizList = doc.getElementsByTagName("ActorData");

            HashMap<String, String> map = null;

            for (int i = 0; i < quizList.getLength(); i++) {

                map = new HashMap<String, String>();

                Node firstQuestionNode = quizList.item(i);

                if (firstQuestionNode.getNodeType() == Node.ELEMENT_NODE) {

                    Element firstAircraftElement = (Element) firstQuestionNode;
                        // 1.-------
                        NodeList idList = firstAircraftElement
                                .getElementsByTagName(KEY_ID);
                        Element firstIdElement = (Element) idList.item(0);
                        NodeList textIdList = firstIdElement.getChildNodes();
                        // --id
                        map.put(KEY_ID, textIdList.item(0).getNodeValue()
                                .trim());

                        // 2.-------
                        NodeList nameList = firstAircraftElement
                                .getElementsByTagName(KEY_NAME);
                        Element firstNameElement = (Element) nameList.item(0);
                        NodeList textNameList = firstNameElement
                                .getChildNodes();
                        // --name
                        map.put(KEY_NAME, textNameList.item(0).getNodeValue()
                                .trim());

                        // 3.-------
                        NodeList iconList = firstAircraftElement
                                .getElementsByTagName(KEY_ICON);
                        Element firstIconElement = (Element) iconList.item(0);
                        NodeList textIconList = firstIconElement
                                .getChildNodes();
                        // -- Image Icon
                        map.put(KEY_ICON, textIconList.item(0).getNodeValue()
                                .trim());
                        // Add to the Arraylist
                        actorDataCollection.add(map);

                }
            }

            BinderActorData bindingData = new BinderActorData(this,
                    actorDataCollection);
            // Adding items to listview
            list = (ListView) findViewById(R.id.list);
            // Adding items to listview
            inputSearch = (EditText) findViewById(R.id.inputSearch);

            list.setAdapter(bindingData);

            /**
             * Enabling Search Filter
             * */
            inputSearch.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence cs, int arg1, int arg2,
                        int arg3) {
                    // When user changed the Text
                    //BrowseActors.this.bindingData.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
                }
            });

            // Click event for single list row
            list.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {

                    Intent i = new Intent();
                    i.setClass(BrowseActors.this, ViewActor.class);

                    // parameters
                    i.putExtra("position", String.valueOf(position + 1));

                    /*
                     * selected item parameters 
                     */

                    i.putExtra("name",
                            actorDataCollection.get(position).get(KEY_NAME));
                    i.putExtra("icon",
                            actorDataCollection.get(position).get(KEY_ICON));

                    // start the sample activity
                    startActivity(i);
                }
            });
        }

        catch (IOException ex) {
            Log.e("Error", ex.getMessage());
        } catch (Exception ex) {
            Log.e("Error", "Loading exception");
        }
    }
}
4

1 に答える 1

0

検索は元のデータ ソースに実装されます。それは XML/JSON/データベースまたはその他のものである可能性があります。

検索に「position」パラメーターを使用していますが、View ビューパラメーターを使用できると思います。ListView の行に非表示のフィールドを保持し、それをある種の主キーにマップするだけです。

OnClick イベントが発生すると、ビューから行レイアウトを取得し、findViewByID() 呼び出しを実行して非表示のコントロールを取得できます。そのコントロールの値から、バックエンド Web サービスを呼び出したり、x-path クエリなどを実行したりできます。

于 2013-09-28T19:41:17.507 に答える