0

在这里我创建了自定义对话框,其中包括单选模式的列表视图。当用户在列表视图中选择其中一个项目时,应在下次打开对话框时选择它,并且用户还必须能够选择另一个项目。 Butmy问题是当对话框重新打开时对话单选按钮未被选中。我已经回答了http://blog.thisisfeifan.com/2011/10/2-lines-text-in-single-choice-listview.htmlListView项目单击打开与另一个自定义列表视图的自定义对话框

那么我的代码有什么问题?

我定制对话框的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout android:id="@+id/relativeLayout1" 
     android:layout_width="250dp" 
     android:layout_height="50dp"  
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:background="@drawable/list_selector"> 

    <LinearLayout android:layout_centerVertical="true" 
     android:layout_width="250dp" 
     android:layout_height="50dp" 
     android:layout_alignParentLeft="true" 
     android:orientation="vertical" android:gravity="center_vertical"> 

    <TextView android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:id="@+id/tv_MainText" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:paddingLeft="12dp" /> 
    </LinearLayout> 

    <RadioButton android:layout_height="wrap_content" 
     android:id="@+id/rb_Choice" android:layout_width="wrap_content" android:layout_centerVertical="true" 
     android:layout_alignParentRight="true" android:gravity="center_vertical" 
     android:focusable="false" android:clickable="false" 
     android:focusableInTouchMode="false" 
     android:paddingRight="12dp"> 
     </RadioButton> 

</RelativeLayout> 

自定义对话框列表视图文件:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="250dp" 
    android:layout_height="210dp"> 

    <LinearLayout 
     android:id="@+id/layout_btn" 
     android:layout_width="fill_parent" 
     android:layout_height="3dp" 
     android:gravity="center">   
     <ImageView 
      android:src="@drawable/separator" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_above="@+id/dialoglist" 
     />   
    </LinearLayout> 
    <ListView 
     android:id="@+id/dialoglist" 
     android:layout_width="250dp" 
     android:layout_height="215dp" 
     android:divider="#242424" 
     android:dividerHeight="2dp" 
     android:listSelector="@drawable/list_selector" 
     android:paddingTop="5dp" 
     /> 
    </RelativeLayout> 

在我有ListView和列表项我的主要活动点击我已经打开自定义对话框:

lv.setOnItemClickListener(new OnItemClickListener() { 

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

       if(position == 1) 
       { 
        final Dialog dialog = new Dialog(context,R.style.CustomDialogTheme); 
        dialog.setContentView(R.layout.dialog_layout); 


        dialog.setTitle("Select Font Size"); 

        final String[] sizeType = new String[] {"Normal" , "Medium" , "Large" , "Extra Large"}; 
        final ArrayList<HashMap<String, Object>> m_data = new ArrayList<HashMap<String, Object>>(); 
        final ArrayList<HashMap<String, Object>> m_data_new = new ArrayList<HashMap<String, Object>>(); 

        final HashMap<String, Object> data_new = new HashMap<String, Object>(); 
        for(int i = 0; i < sizeType.length;i++) 
        { 
         HashMap<String, Object> data = new HashMap<String, Object>(); 
         data.put("item1",sizeType[i]); 

         m_data.add(data); 

        } 

         for (HashMap<String, Object> m :m_data) //make data of this view should not be null (hide) 

         { 
           m.put("checked", false); 

         } 

        final ListView lst = (ListView) dialog.findViewById(R.id.dialoglist); 
        //lst.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

        final SimpleAdapter adapter = new SimpleAdapter(context, m_data, R.layout.dialoglist_item,new String[] {"item1","checked"},new int[] {R.id.tv_MainText,R.id.rb_Choice}); 
        lst.setAdapter(adapter); 

        lst.setOnItemClickListener(new OnItemClickListener() { 
         public void onItemClick(AdapterView<?> arg0, View arg1, 
           int item, long arg3) { 
          RadioButton rb = (RadioButton) dialog.findViewById(R.id.rb_Choice); 
          if (!rb.isChecked()) //OFF->ON 
          {      
           for (HashMap<String, Object> m :m_data) //clean previous selected 
            m.put("checked", false); 

           m_data.get(item).put("checked", true);    
           adapter.notifyDataSetChanged(); 


          }  

          selectedSize = sizeType[item]; 
          //dialog.dismiss(); 

         } 

        }); 
        dialog.show(); 
       } 

所以请解决我的问题。提前Thanx。

+0

我无法得到这应该如何工作的句柄?会不会要求提供对话图片?与单选按钮? – mango

+0

它似乎与单选按钮的警报对话框类似。 – zanky

+0

那么你想要保存什么?如果1按钮被点击或没有? – mango

回答

0

对于简单地保存价值的持续应用会话可以使用SharedPreferences API: 这里有保存的样品:

SharedPreferences settings = getSharedPreferences("MYPREFS", 0); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putBoolean("isChecked", rb.isChecked()); 
    editor.commit(); 

其中rb是你的单选按钮。并检索,并在下一次应用它,你可以使用:

SharedPreferences settings = getSharedPreferences("MYPREFS", 0); 
    rb.setChecked(settings.getBoolean("isChecked", false)); 

注意false这里简直就是万一默认值与该键不存在sharedPrefs文件尚未值。如果不存在,它会自动创建一个。

+0

ohk。感谢您的帮助。我会尝试.. – zanky

相关问题