3

我在使用DialogFragment和ListView時遇到了問題。當我在onCreate中使用setStyle時,問題就出現了。使用setStyle時DialogFragment中的Android ListView錯誤

下面是代碼(更清晰瞭解這個問題,我已經在洋紅色列表textviews):

import android.app.DialogFragment; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

public class MenuDialog extends DialogFragment { 

    public static MenuDialog create() { 
     MenuDialog frag = new MenuDialog(); 
     return frag; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setStyle(STYLE_NO_TITLE, 0); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     ListView v = new ListView(getActivity()); 
     v.setAdapter(new BaseAdapter() { 

      @Override 
      public View getView(int position, View convertView, ViewGroup parent) { 
       TextView view = null; 
       if (convertView == null) { 
        view = new TextView(getActivity()); 
        view.setTextAppearance(getActivity(), android.R.style.TextAppearance_Large); 
        view.setPadding(15, 15, 15, 15); 
        view.setBackgroundColor(Color.MAGENTA); 
       } 
       else 
        view = (TextView) convertView; 

       switch (position) { 
       case 0: view.setText("Random"); break; 
       case 1: view.setText("Community favourites"); break; 
       case 2: view.setText("Change image"); break; 
       case 3: view.setText("Share"); break; 
       case 4: view.setText("Informations"); break; 
       } 

       return view; 
      } 

      @Override public long getItemId(int arg0) { return 0; } 
      @Override public Object getItem(int arg0) { return null; } 
      @Override public int getCount() { return 5; } 
     }); 
     return v; 
    } 
} 

這裏是它提供的對話框的圖像:

No title: Not working

現在,如果我只是評論setStyle(STYLE_NO_TITLE,0);在onCreate方法行,按預期工作的一切:

With title : works

我在做什麼錯? 我無法使用簡單的AlertDialog,因爲我需要定製更多這些列表項。

編輯:You can download here a demo Android Eclipse project that demonstrates the problem

+0

嗨,所羅門BRYS問題已經solved.Check編輯答案 – mukesh

+0

測試後它,請通知其罰款或不? – mukesh

回答

2
  1. list.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="wrap_content" 
        android:orientation="vertical" > 
    
        <ListView 
        android:id="@+id/list" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
    
        /> 
    
    </LinearLayout> 
    
  2. menu_rowview.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="wrap_content" 
        android:orientation="horizontal" 
        android:id="@+id/linear" 
         > 
    
         <TextView 
          android:id="@+id/textView1" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_marginBottom="10dp" 
          android:layout_marginLeft="20dp" 
          android:layout_marginRight="20dp" 
          android:layout_marginTop="10dp" 
          android:text="@android:string/unknownName" 
          android:textAppearance="?android:attr/textAppearanceLarge" /> 
    
         </LinearLayout> 
    
  3. 變化onCreateView()(在您的項目)

    public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.list, container); 
    ListView v=(ListView) view.findViewById(R.id.list); 
    v.setAdapter(new BaseAdapter() { 
    
        public View getView(int position, View convertView, ViewGroup parent) { 
         View rowView = null; 
         if (convertView == null) { 
          rowView = inflater.inflate(R.layout.menu_rowview, parent, false); 
    
         } 
         else 
          rowView = convertView; 
         LinearLayout lay=(LinearLayout) rowView.findViewById(R.id.linear); 
         lay.setBackgroundColor(Color.MAGENTA); 
         TextView textView = (TextView) rowView.findViewById(R.id.textView1); 
         switch (position) { 
         case 0: textView.setText("Random"); break; 
         case 1: textView.setText("Community favourites"); break; 
         case 2: textView.setText("Change image"); break; 
         case 3: textView.setText("Share"); break; 
         case 4: textView.setText("Informations"); break; 
         } 
    
         return rowView; 
        } 
    
        @Override public long getItemId(int arg0) { 
         return arg0; } 
        @Override public Object getItem(int arg0) { return arg0; } 
        @Override public int getCount() { return 5; } 
    }); 
    return view; 
    } 
    
+0

我認爲它對你有幫助。 – mukesh

+0

問題是你設置了textview的backgrounnd顏色而不是行 – mukesh

+0

這並不能解決問題。我用一個演示項目創建了一個檔案,[你可以在這裏下載](http://www.mediafire.com/?jkjrza639a2dzz5)。 –

1

使用android:minWidth="360dp"TextView

0

這個問題快把我逼瘋了一整天的今天,這絕對是一個系統的錯誤。我最終什麼事做的工作圍繞它是我離開STYLE_NO_TITLE,因爲我真的不想處理的標題,我的其他樣式對話框進去主題:

fragment.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Dialog); 

這當然會帶來問題上的一些手機,這不僅僅是背景問題,也是一個可觸摸的區域。現在討厭哈克解決方法是在我的項目XML佈局:

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:height="48dp" 
    android:width="600dp" 
    android:textSize="19sp" 
    android:textColor="@color/blue" 
    android:paddingLeft="16dp" 
    android:gravity="center_vertical" 
    /> 

硬編碼寬度較大的值,使一招,但我不能肯定它是如何影響對羅水庫設備的性能雖然。在測試了Kindle Fire的,的Nexus 7和仿真器從2.2 希望這會幫助別人

1

使用onCreate方法的代碼

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

+1

geDialog()在onCreate()函數內返回null,並且你得到一個java.lang.NullPointerException –

+0

嘗試'getActivity().getDialog().getWindow()。requestFeature(Window.FEATURE_NO_TITLE);' – Narendra

相關問題