Создание диалогового окна по нажатию на экран (Android) - PullRequest
2 голосов
/ 05 ноября 2011

Мне нужно, чтобы появилось диалоговое окно, как только пользователь моей программы делает длинный щелчок на экране (в любом месте экрана) ...

Все учебники, которые я нашел до сих пор, помогли мне сделать так, чтобы диалоговое окно появлялось при нажатии кнопки, но это действительно не то, что мне нужно.

Может ли кто-нибудь помочь мне с этим?

Мой код сейчас выглядит следующим образом:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    /* In the onCreate() method, we need to set the content to our XML layout, 
     * extract the TabHost object, and call setup() on the TabHost 
     * (we need to do this because our Activity is not a TabActivity). */

    tabHost = (TabHost) findViewById(android.R.id.tabhost);

    tabHost.setup();
    tabHost.setOnTabChangedListener(this);

    //Next, we want to extract our ListView from the XML, set it to a member variable, and add some initial coordinates to its list adapter
    listView = (ListView) findViewById(R.id.list);
    listView.setEmptyView((TextView) findViewById(R.id.empty));

    // Random points on the geo list:
    List<GeoPoint> pointsList = new ArrayList<GeoPoint>();
    pointsList.add(new GeoPoint((int)(-30.03269*1E6), (int)(-51.225514*1E6)));
    pointsList.add(new GeoPoint((int)(41.89001*1E6), (int)(12.496948*1E6)));
    listView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, pointsList));

    // add an onclicklistener to see point on the map
    listView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView parent, View view, int position, long id) {
            GeoPoint geoPoint = (GeoPoint) listView.getAdapter().getItem(position);
            if(geoPoint != null) {
                // have map view moved to this point
                setMapZoomPoint(geoPoint, 12);
                // programmatically switch tabs to the map view
                tabHost.setCurrentTabByTag(MAP_TAB_TAG);
            }
        }
    });

    // Then, we want to extract our MapView from the XML and set it to a member variable.
    mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);
    mapView.postInvalidate();




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

    alert.setTitle("make route");
    alert.setMessage("from:");

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

    alert.setMessage("to:");
    final EditText toAddress = new EditText(this);
    alert.setView(toAddress);

    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
      Editable value1 = fromAddress.getText();
      Editable value2 = toAddress.getText();
      // Do something with value!
      }
    });

     Editable value2 = toAddress.getText();


    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {
        // Canceled.
      }
    });


    View layout = findViewById(R.id.layout);

    layout.setOnLongClickListener(new View.OnLongClickListener() {

        public boolean onLongClick(View v) {
    alert.show();
            return false;
        }
    });

Макет:

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout 
        android:id="@+id/layout"
        android:orientation="vertical"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent">
        <TabWidget 
            android:id="@android:id/tabs"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" />
        <FrameLayout 
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent">
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent"
                android:id="@+id/main">
                <ListView 
                    android:id="@+id/list" 
                    android:layout_width="fill_parent"
                    android:layout_height="0dip" 
                    android:layout_weight="1" />
                <TextView 
                    android:id="@+id/empty" 
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" 
                    android:gravity="center"/>

            </LinearLayout>

            <RelativeLayout 
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/mainlayout" 
                android:orientation="vertical"
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent">
                <com.google.android.maps.MapView
                    android:id="@+id/mapview" 
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent" 
                    android:clickable="true"
                    android:apiKey="MY KEY HERE" />
            </RelativeLayout>

        </FrameLayout>
    </LinearLayout>
</TabHost>

Действие - это MapActivity, поэтому правильно ли я считаю, что не могу выполнить длинный щелчок на MapActivity?

Ответы [ 3 ]

2 голосов
/ 05 ноября 2011

Например, вы можете установить идентификатор для LineraLayout в файле макета

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:id="@+id/layout">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

</LinearLayout>

и в действии добавьте LongClickListener

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        View layout = findViewById(R.id.layout);

        layout.setOnLongClickListener(new View.OnLongClickListener() {

            @Override
            public boolean onLongClick(View v) {
                //show dialog box
                return false;
            }
        });
    }

// редактировать

Я думаю, вы должны из AlertDialog.Builder создать AlertDialog и после этого показать диалог.

предупреждение - это ваш AlertDialog.Builder

AlertDialog alert2 = alert.create();
alert2.show() // you have to show AlertDialog, not AlertDialog.Builder
1 голос
/ 16 февраля 2012
Your Actvity should implements onLongClickListener

public class Layout1Activity extends Activity implements OnLongClickListener{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public boolean onLongClick(View arg0) {
        // TODO Auto-generated method stub

/////////////////Perform Action   ////////////////////

        return false;
    }
0 голосов
/ 10 апреля 2013

Я думаю, что лучший способ - реализовать onTouchEvent вашей деятельности.просто важно событие ontouch и поместите свой код внутрь.:)

public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    return super.onTouchEvent(event);
}
...