5

私は、データベースで検索を行うためのキーワードを受け取るリストとメソッドを持つメインアクティビティを持っています。

AlertDialogこのフォームのアクションリスナーを介してボタンをクリックしたときにメインアクティビティに表示される検索ボックスを使用して実装したい

OnClickListener searchListener = new OnClickListener() {

    public void onClick(View v) {
        // ...
    }
};

このダイアログには、単純なEditTextボックスと2つのボタン(Searchおよび)があり、によって選択されたものを次の形式の検索メソッドにCancel渡す必要があります。StringEditText

public void searchWord(String keyword){
    // ....search in DB
    // ...updateListGUIWithNewValues()
}

このメソッドは、アクティビティがGUIリストを更新できるように、新しいリスト値を取得するためのメインアクティビティにあります。

検索メソッドとメインアクティビティはすでに実装していますが、この種のダイアログを実装する正しい方法がわかりません。

4

3 に答える 3

6

これが私のアラートダイアログコードで、編集テキストが特徴です。ボタンクリックリスナー内で呼び出すので、別のメソッドではありません。先週、このサイトのどこかで見つけましたが、見つからないので引用できます。

AlertDialog.Builder alert = new AlertDialog.Builder(context);
alert.setTitle("Manual Item Search");
alert.setMessage("Input Search Query");
// Set an EditText view to get user input 
final EditText input = new EditText(context);
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
    String result = input.getText().toString();
        //do what you want with your result
        }
    });
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
         // Canceled.
        }
    });
alert.show();
于 2013-02-28T20:03:23.633 に答える
2

こんにちは、アラートダイアログを使用して検索ダイアログを作成するためにこのチュートリアルを試してくださいここをクリックしてください

  AlertDialog.Builder alert = new AlertDialog.Builder(this);

  alert.setTitle("Search Box");
  alert.setMessage("Message");

 // Set an EditText view to get user input 
 final EditText input = new EditText(this);
 alert.setView(input);

 alert.setPositiveButton("Search", new DialogInterface.OnClickListener() {
 public void onClick(DialogInterface dialog, int whichButton) {
  String value = input.getText();
 // Do something with value!
   }
  });
  alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
  public void onClick(DialogInterface dialog, int whichButton) {
  // Canceled.
  }
 });

  alert.show();
于 2013-02-28T20:10:26.650 に答える
2

ダイアログXML

このxmlをlayoutフォルダにビルドします

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="text" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="2" >

        <Button
            android:id="@+id/search"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Search" />

        <Button
            android:id="@+id/cancel"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Cancel" />
    </LinearLayout>

</LinearLayout>

ダイアログクラス

ダイアログを処理するこのクラス

class dialog extends Dialog {

    private StackQuestionActivity activity;
    private Button search, cancel;
    private EditText text;
    private dialog thisDialog;

    public dialog(StackQuestionActivity context) {
        super(context);
        // TODO Auto-generated constructor stub
        this.activity = context;
        this.thisDialog = this;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialoge);
        getWindow().setLayout(android.view.ViewGroup.LayoutParams.FILL_PARENT,
                android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
        initalize();
    }

    private void initalize() {
        // TODO Auto-generated method stub
        text = (EditText) findViewById(R.id.text);
        search = (Button) findViewById(R.id.search);
        cancel = (Button) findViewById(R.id.cancel);
        cancel.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                thisDialog.cancel();
            }
        });
        search.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String textString = text.getText().toString();
                activity.searchWord(textString);
            }
        });
    }

}

あなたの活動

これがメインのアクティビティです。ボタンが押されたときにダイアログクラスを呼び出します。

package com.example.question;

import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class StackQuestionActivity extends Activity {
    /** Called when the activity is first created. */
    private Button press;
    private StackQuestionActivity activity;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.activity = this;
        setContentView(R.layout.main);
        press = (Button) findViewById(R.id.button);
        press.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                dialog yourDialog = new dialog(activity);
                yourDialog.show();
            }
        });
    }

    public void searchWord(String textString) {
        // TODO Auto-generated method stub

    }
}

これが結果です 小切手

于 2013-02-28T20:17:46.353 に答える