2012-07-20 52 views
2

我一直在玩警報對話框。我想顯示一個對話框,顯示有關列表視圖中的列表項的特定信息。就像android的文件管理器的詳細信息對話框一樣。Android:如何創建一個詳細的alertdialog

圖片:https://dl.dropbox.com/u/20856352/detailsbox.jpg

這個細節對話框有趣的是,它表明這是非常相似的首選項在首選項屏幕列表項。他們可以點擊,他們展示了一個非常好的兩行項目列表項目。

我需要創建一個類似的對話框,但我不知道如何做到這一點。我玩了一下。偏好XML不能用作alertdialog的佈局。而且我無法開發類似於上面的圖片的佈局。需要幫助/指導如何實現這一點。

法拉茲愛資哈爾

回答

5

您可能不想使用自定義對話框,因爲難以複製AlertDialog的外觀。 AlertDialog可以使用AlertDialog.setListAdapter顯示項目列表。您可以通過使用ListAdapter的自定義實現來自定義項目列表,以使每個項目顯示兩行文本。附帶的屏幕截圖由以下代碼和xml生成。

enter image description here

public class Temp extends Activity 
{ 
    private String[] listItemsFirstRow = {"item 1", "item 2", "item 3"}; 
    private String[] listItemsSecondRow = {"item 1", "item 2", "item 3"}; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setAdapter(new MyAdapter(), null); 
     builder.setTitle("Title"); 
     builder.setPositiveButton(android.R.string.ok, new OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
      } 
     }); 

     builder.show(); 
    } 

    class MyAdapter extends BaseAdapter 
    { 

     @Override 
     public int getCount() 
     { 
      return listItemsFirstRow.length; 
     } 

     @Override 
     public Object getItem(int position) 
     { 
      //this isn't great 
      return listItemsFirstRow[position]; 
     } 

     @Override 
     public long getItemId(int position) 
     { 
      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) 
     { 
      if(convertView == null) 
      { 
       convertView = getLayoutInflater().inflate(R.layout.main, null); 
      } 

      ((TextView)convertView.findViewById(R.id.text1)).setText(listItemsFirstRow[position]); 
      ((TextView)convertView.findViewById(R.id.text2)).setText(listItemsSecondRow[position]); 

      return convertView; 
     } 

    } 
} 

main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:minHeight=![enter image description here][2]"?android:attr/listPreferredItemHeight" 
    android:orientation="vertical" 
    android:gravity="center_vertical" 
    android:paddingLeft="15dip" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <TextView 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:id="@+id/text1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
    <TextView 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textColor="?android:attr/textColorSecondary" 
     android:id="@+id/text2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
</LinearLayout> 
+0

非常感謝!這似乎是我正在尋找的確切的東西。 – 2012-07-21 04:54:46

0

只是做你的xml文件一樣普通屏/頁

然後把這個代碼對你的onCreate()

AlertDialog.Builder builder; 

     LayoutInflater inflater = getLayoutInflater(); 
     View layout = inflater.inflate(R.layout.toast_info, 
       (ViewGroup) findViewById(R.id.toast_layout_root)); 

     builder = new AlertDialog.Builder(this); 
     builder.setView(layout); 
     alertDialog = builder.create(); 

這r.layout.toast_info是你的XML文件 和r.id.toast_layout_root是你的根xml id(例如'<'linearlayout android:id =「+ @ id ....'''')

and wh你想要顯示它只寫這一行

alertDialog.show();

+0

感謝超級及時答覆。但是你已經解釋的是我已經知道的。我知道如何膨脹一個alertdialog並顯示它。我的問題是,注意圖像中的兩行listitem。我需要指導如何創建佈局。我已經知道如何將該佈局插入alertdialog並顯示它。再次感謝。 – 2012-07-20 18:05:06

+0

@FarazAzhar您可以設計您的列表項目,然後將列表視圖(例如)膨脹到對話框。你也可以處理點擊事件... – 2012-07-20 18:08:52

+0

嗨法拉茲, 我可能無法正確理解你的問題。 所以,你的問題是如何做一個不錯的佈局作爲你的附加文件?你的意思是關於那個listview? – 2012-07-20 18:08:55

0

我的建議是使用一個活動作爲對話框。這樣,創建自定義對話框非常簡單。這是一個我認爲你可以建立的小例子。

**Activity** 

public class CustomDialogEx extends Activity implements OnClickListener { 

private Button button; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_layout); 
    button = (Button) findViewById(R.id.button1); 
    button.setOnClickListener(this); 
} 


@Override 
public void onClick(View v) { // pass your string data via this intent to the custom view 
    // show the custom dialog 
    Intent i = new Intent(); 
    // i.putExtra(<your key/value pairs here> 
    i.setClass(this, DialogActivity.class); 
    startActivity(i); 
} 
} 

**************************************************************************** 

**Custom Dialog** 

// The Activity will serve as the Dialog 

public class DialogActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.your_dialog_layout); 
    Intent i = new Intent(); 
    Bundle b = getIntent().getExtras(); 
    b.getString(<your key>) 
} 
} 

***************************************************************************** 

**AndroidManifest** 

<activity 
    android:name="DialogActivity" 
    android:configChanges="keyboardHidden|orientation" 
    android:theme="@android:style/Theme.Dialog" > 
</activity> 
0
this may also help you 

public class ShareDialog extends Dialog implements android.view.View.OnClickListener{ 

    Context mcontContext; 
    Button btnok; 
    Listview lstview; 

    public ShareDialog(Context context) { 
     super(context);  
     mcontContext= context; 
       //pls replace with your dialog.xml file 
     setContentView(R.layout.sharedialog);  
     bindComponent(); 
     addListener();  
    } 
    private void bindComponent() { 
     // TODO Auto-generated method stub 
     lstview=(Listview) findViewById(R.id.lstdetail); 
     btnok=(Button) findViewById(R.id.btnok); 

      //bind here listview with your adpter 
    } 

    private void addListener() 
    { 

     btnshareviwifi.setOnClickListener(this);   
    } 

    @Override 
    public void onClick(View v) { 

     switch (v.getId()) { 
     case R.id.btnok: 


        dismiss();  

      break; 


     default: 
      break; 
     } 

    } 

} 


and where you want to show 

ShareDialog shobje=new ShareDialog (context); 

shobje.show() 
相關問題