2012-05-03 9 views
1

ユーザーがEditTextボックスに検索パラメータを入力できるようにするAndroidマッピングアプリケーションで作業しています。 MapViewのピンでプロットされます。Android:メインアクティビティ内のSlidingDrawer(または小さなリスト)を動的に埋め込みます

ピンをクリックするとその場所に関する情報が表示されますが、ユーザーに詳細情報を提供したいと考えています。私は、SlidingDrawerを設定して、目的地/距離の名前をユーザーに示すために開くことができると考えました。

これに多くの時間を費やし、多くの読書をして少し進歩を遂げた今、私はコミュニティに援助を求めています。

私が抱えている問題は、メインアクティビティ内でSlidingDrawerの内容を取り込む方法を理解できないことです。私は新しいアクティビティを立ち上げることができますが、それは私のMapViewをスクリーンから外します。私はマップとSlidingDrawerを見ることができる必要があります。また、SlidingDrawerをアクティビティとして設定することなく、SlidingDrawerを設定する方法を理解することはできません。

(また、必ずしも宛先のリストを含むSlidingDrawerである必要はありません。レイアウトを変更して小さな(最大3項目)リストを作成し、地図の一部を取り除くことができます。不動産は、それは簡単ですが、私はどちらか、それを行うかどうかはわかりません)

もしここに私のSlidingDrawerを呼び出すコードです:

  //call SlidingDrawer 
     Intent drawerIntent = new Intent(this, SlidingDrawerFinal.class); 
     drawerIntent.putExtra("lat", lat); 
     drawerIntent.putExtra("lon", lon); 
     int numberOfTargetsForList = numberOfLoops; 
     drawerIntent.putExtra("numberOfTargetsForList", numberOfTargetsForList); 
     for(int i = 0; i < target.length; i++){ 
      drawerIntent.putExtra("target" + Integer.toString(i), target[i]); 
     } 
     this.startActivity(drawerIntent); 

これは(私のSlidingDrawerクラスのコードです引き出し内のリストを塗りつぶす:

View inflatedDrawerLayout = getLayoutInflater().inflate(R.layout.drawer_main, null); 
    int width = getWindow().getAttributes().width; 
    int height = 300; 
    LayoutParams params = new LayoutParams(width, height); 
    getWindow().addContentView(inflatedDrawerLayout, params); 

    // add some data 
      ArrayList<MyData> myDataList = new ArrayList<MyData>(); 
      myData = new MyData[numberOfTargets]; 

      for(int i = 0; i < numberOfTargets; i++){ 
       String lineTwo = ""; 
       if(target[i].getRating().equals("Not Yet Rated")){ 
        lineTwo = "  " + target[i].getRating() + "       " + 
          Double.toString((Math.round(target[i].getDistance()*100.0))/100.0) + " miles"; 
       } 
       else{ 
        lineTwo = "  rating: " + target[i].getRating() + "/5 stars     " + 
          Double.toString((Math.round(target[i].getDistance()*100.0))/100.0) + " miles"; 
       } 
       String lineOne = (Integer.toString(i + 1) + ": " + target[i].getName() + ", " + target[i].getVicinity()) + "\n" + lineTwo; 
       myData[i] = new MyData(lineOne, i); 
       myDataList.add(myData[i]); 

      }     

      mListView = (ListView) findViewById(R.id.listview_); 

      mListView.setAdapter(new MyListAdapter(this, R.layout.drawer_row, myDataList)); 
      drawer = (SlidingDrawer) findViewById(R.id.drawer); 
      handleButton = (Button) findViewById(R.id.handle); 
      drawer.animateOpen(); 

      drawer.setOnDrawerOpenListener(new OnDrawerOpenListener() { 

      public void onDrawerOpened() { 
        handleButton.setBackgroundResource(R.drawable.handle_down_white); 
       } 
      }); 

マイレイアウトファイル:

main.xml:

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="10dip"> 
     <EditText 
      android:id="@+id/geocode_input" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:hint="@string/placeName" 
      android:inputType="text" 
      android:lines="1" />  
     <Button 
      android:id="@+id/geocode_button" 
      android:layout_width="0dip" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="@string/goLabel" /> 
    </LinearLayout> 
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" >   
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" > 
     <view android:id="@+id/mv" 
      class="com.google.android.maps.MapView" 
      android:layout_width="fill_parent" 
      android:layout_height="0dip" 
      android:layout_weight="1" 
      android:clickable="true" 
      android:apiKey="my_API_Key"/> 
    </LinearLayout> 
    <include layout="@layout/drawer_main"/> 
    </FrameLayout> 
</LinearLayout> 

と、最終的には、drawer_main.xml:これはとても長くていること

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
    <SlidingDrawer xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/drawer" 
     android:handle="@+id/handle" 
     android:content="@+id/content" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:background="@null" 

     android:layout_gravity="bottom"> 

      <LinearLayout 
       android:id="@id/content" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:orientation="vertical"> 

        <TextView 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:textSize="14dip" 
         android:textStyle="bold|italic" 
         android:background="@android:color/white" 
         android:textColor="@android:color/black" 
         android:text="@string/top_search_results" > 
        </TextView> 

        <View 
         android:background="@android:drawable/divider_horizontal_bright" 
         android:layout_width="fill_parent" 
         android:layout_height="2dp" > 
        </View> 

        <ListView 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:id="@+id/listview_" 
         android:background="@android:color/black" 
         android:textColor="@android:color/white" 
         android:divider="@android:color/transparent" 
         android:dividerHeight="2dp" > 
        </ListView> 

      </LinearLayout> 

      <Button 
       android:id="@id/handle" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/handle_down_white"> 
      </Button> 

    </SlidingDrawer> 
</FrameLayout> 

申し訳ありません。どんな支援も大歓迎です。

答えて

0

私が選択した解決方法は、プログラム的には理想的ではありませんが、レイアウトはうまく機能します。 3つ以上の結果がないことを知っていたので、検索バーの下に3つの小さなTextViewを含めるようにレイアウトを変更しました。(悲しいことに)SlidingDrawerを完全に削除しました。結果が返ってくると、必要な数だけTextViewを作成し、それぞれにonClickListenerを設定します。それはうまくスケールされず、すべてがハードコードされます。それは動作します。私はAndroidについてもっと学ぶときに、この解決策を改善しようとするかもしれません。

新しいレイアウト:

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="10dip"> 


     <EditText 
      android:id="@+id/geocode_input" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:hint="@string/placeName" 
      android:inputType="text" 
      android:lines="1" /> 

     <Button 
      android:id="@+id/geocode_button" 
      android:layout_width="0dip" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="@string/goLabel" /> 

    </LinearLayout> 

    <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textSize="13dip" 
      android:textStyle="bold|italic" 
      android:background="@android:color/black" 
      android:textColor="@android:color/white" 
      android:id="@+id/search_results_header" > 
    </TextView> 

    <View android:id="@+id/bar_over_one"  
      android:layout_width="fill_parent" 
      android:layout_height="1dp" 
      android:background="#DADADA" /> 

    <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textSize="11dip" 
      android:background="@android:color/black" 
      android:textColor="@android:color/white" 
      android:id="@+id/line_one" > 
    </TextView> 

    <View android:id="@+id/bar_over_two"  
      android:layout_width="fill_parent" 
      android:layout_height="1dp" 
      android:background="#DADADA" /> 

    <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textSize="11dip" 
      android:background="@android:color/black" 
      android:textColor="@android:color/white" 
      android:id="@+id/line_two" > 
    </TextView> 

    <View android:id="@+id/bar_over_three"  
      android:layout_width="fill_parent" 
      android:layout_height="1dp" 
      android:background="#DADADA" /> 

    <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textSize="11dip" 
      android:background="@android:color/black" 
      android:textColor="@android:color/white" 
      android:id="@+id/line_three" > 
    </TextView> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" > 
     <view android:id="@+id/mv" 
      class="com.google.android.maps.MapView" 
      android:layout_width="fill_parent" 
      android:layout_height="0dip" 
      android:layout_weight="1" 
      android:clickable="true" 
      android:apiKey="0fmGmyFrFDUrPGrwXR_scZZxVx6CkSdK-sys-Qw"/> 
    </LinearLayout> 
</LinearLayout> 

新しいコード:

private void populateList(int numberOfTargetsForList){ 
    TextView header = (TextView) findViewById(R.id.search_results_header); 
    header.setText("Top Search Results"); 

    int i = 0; 
    //first line in list 
    barOverOne.setVisibility(View.VISIBLE); 
    String ratingAndDistance = ""; 
    if(target[i].getRating().equals("Not Yet Rated")){ 
     ratingAndDistance = "  " + target[i].getRating() + "       " + 
       Double.toString((Math.round(target[i].getDistance()*100.0))/100.0) + " miles"; 
    } 
    else{ 
     ratingAndDistance = "  rating: " + target[i].getRating() + "/5 stars     " + 
       Double.toString((Math.round(target[i].getDistance()*100.0))/100.0) + " miles"; 
    } 
    String detailsForLineOne = (Integer.toString(i + 1) + ": " + target[i].getName() + ", " + target[i].getVicinity()) + "\n" + ratingAndDistance; 
    TextView lineOne = (TextView) findViewById(R.id.line_one); 
    lineOne.setText(detailsForLineOne); 
    lineOne.setOnClickListener(this); 

    i++; 

...(同様のブロックは、I = 1のケースを処理し、I = 2)私のonClick()メソッドで最後に

、:

case R.id.line_one:{ 
    String locForURL = "origin=" + Double.toString(lat/1000000.0) + 
      "," + Double.toString(lon/1000000.0) + "&destination=" + 
      Double.toString(target[0].getLat()/1000000.0) + "," + 
      Double.toString(target[0].getLon()/1000000.0); 
    Intent intent = new Intent(this, ParsingXMLDirectionsWithListView.class); 
     intent.putExtra("dirTitle", target[0].getName()+ " (" + 
      Double.toString((Math.round(target[0].getDistance()*100.0))/100.0) + " miles)"); 
     intent.putExtra("locForURL", locForURL); 
    this.startActivity(intent); 
    break; 
}//line_one 

...(行2と3についても同様のブロック)

完璧ではありませんが、まあまあです。少なくとも、ユーザーの最後からはかなりよく見えますが、SlidingDrawerルートを続行することで、期限を守ることはできませんでした。たぶん私はもう少し自由な時間があるとき、私はそれを理解することができるかどうかを見てみましょう....

+0

誰かが私の元の質問に明確な答えを持っていれば、私はまだそれを聞きたいと思います。 SlidingDrawerをメインアクティビティの中に動的に埋め込むことはできますか? – pjd

0

ポップアップウィンドウを使用できます。

View popupView = layoutInflater.inflate(R.layout.popup_window, null); 

    final PopupWindow popupWindow = new PopupWindow(popupView, 
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

    ImageButton btnCancel = (ImageButton) popupView 
      .findViewById(R.id.btnCancel); 


popupWindow.showAtLocation(LayoutView, Gravity.BOTTOM 
      | Gravity.CENTER_HORIZONTAL, (LayoutView.getWidth() - popupView 
      .getWidth())/2, LayoutView.getHeight() 
      - popupWindow.getHeight() - 10); 
    popupWindow.setAnimationStyle(Animation.RELATIVE_TO_SELF); 
    popupWindow.setFocusable(true); 
    popupWindow.update(); 
+0

超高速応答ありがとう。私が知ることから、PopupWindowの問題は、PopupWindowが一度消されてもそれを呼び出すことができないように思えます。私は、ユーザーがいつでもリストと地図の両方を調べることができるようにする必要があります。しかし、良い考え。お疲れ様でした。 – pjd

+0

ボタンをクリックして私がそれを呼び出すのに使用したビューをクリックして呼び出す –

+0

私はそれを調べます。ありがとう。誰か他の人が私のSlidingDrawerについて考えているのですか? – pjd

関連する問題