2013-05-31 124 views
1

我通過大書呆子牧場指南機器人編程的工作,我在爲第16章的挑戰的挑戰是如何使一個ListView控件的EmptyView,然後做一個按鈕在EmptyView上添加東西。我得到EmptyView工作,但我不知道我應該在哪裏做我的按鈕。這是我的代碼。設置爲EmptyView按鈕onClickListener的Android

public View onCreateView(LayoutInflater inflater, ViewGroup parent, 
Bundle savedInstanceState) { 
View v= super.onCreateView(inflater, parent, savedInstanceState); 
inflater.inflate(R.layout.list_frame_layout, parent); 

return v; 
} 

這裏是我的XML。

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

<ListView 
android:id="@android:id/list" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" > 

</ListView> 

<LinearLayout android:id="@android:id/empty" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:gravity="center"> 

<TextView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:padding="24dp" 
android:text="@string/empty_no_crime" /> 

<Button 
android:id="@+id/empty_new_crime" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="@string/empty_new_crime">  
</Button> 
</LinearLayout> 
</FrameLayout> 

這本書告訴我們使用片段,因此膨脹。我認爲代碼應該是

mNewCrime=(Button)getView().findViewById(R.id.empty_new_crime) 

但這不起作用。有任何想法嗎?

編輯*:嗯,顯然這也確實是行不通的那麼好。當我添加東西時,EmptyView不會消失,它只是在物品被列出時被推下。任何關於如何使EmptyView儘快消失的想法?

回答

1

我一開始也遇到過這個挑戰。我過度想到了!您現在可能已經解決了這個問題,但我認爲爲其他人發佈答案會很有用。以下爲我工作:

  1. 創建一個新的XML文件中指定的「空」和「清單」的意見,你已經做了。

  2. 修改現有onCreateView方法誇大修改後的新佈局,包含了「空」和「列表」你已經在你的XML定義的視圖。

  3. 創建按鈕的一個新的按鈕和設置onClickListener。

下面是代碼:

@TargetApi(11) 
@Override 
// We override the onCreateView to set the subtitle by default if we are rocking >3.0 
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) 
{ 
    super.onCreateView(inflater, parent, savedInstanceState); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ 
     if(mSubtitleVisible){ 
      getActivity().getActionBar().setSubtitle(R.string.subtitle); 
     }// End inner if 
    }// End if 

    View v = inflater.inflate(R.layout.empty_layout, parent, false); 

    mNewCrimeButton = (Button)v.findViewById(R.id.add_crime); 
    //Define an click event listener for the button and launch the new crime fragment when clicked 
    mNewCrimeButton.setOnClickListener(new View.OnClickListener(){ 
       public void onClick(View v){ 
        Crime crime = new Crime(); 
        //Get the crimelab from the activity and add the crime 
        CrimeLab.get(getActivity()).addCrime(crime); //getActivity returns the activity this fragment is attached to 
        Intent i = new Intent(getActivity(), CrimePagerActivity.class); 
        startActivityForResult(i,0); 
       }//End onClick 
      }); 

    return v; 
}// End onCreateView 

這應該與您現有的XML佈局工作。我希望這有幫助。

0

我最初在這方面掙扎不已,實質上是以上述海報的方式解決它。但是我的問題有點不同。我是越來越炸燬在啓動應用程序的,因爲我的代碼,建立的onClick監聽器是這樣的:

Button mCrimeButton = (Button)v.findViewById(R.id.crime_button); 
mCrimeButton.setOnClickListener(new View.OnClickListener(){ 
    public void onClick(View v) { 
     initiateCrimeRecord(); 
    } 
}); 

直到我搬到mCrimeButton申報達一流水平使其成爲一個我是能夠成功地執行應用程序的類的實例變量:

public class CrimeListFragment extends ListFragment { 
    private static final String TAG = "CrimeListFragment"; 
    private ArrayList<Crime> mCrimes; 
    private boolean mSubtitleVisible; 
    private Button mCrimeButton; 
    * 
    * 
    * 

@TargetApi(11) 
@Override 

public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_empty_crime_list, parent, false); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     if (mSubtitleVisible) { 
      getActivity().getActionBar().setSubtitle(R.string.subtitle); 
     } else { 
      getActivity().getActionBar().setSubtitle(null); 
     } 

    } 

    // Set the button up on the empty view 
    mCrimeButton = (Button)v.findViewById(R.id.crime_button); 
    mCrimeButton.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v) { 
      initiateCrimeRecord(); 
     } 
    }); 

    return v; 
} 

然後我回去,並注意到,書中的所有其它的例子,是那些獲得操縱部件被宣佈爲一體的民營實例類。爲什麼是這樣? Android不允許你只需要一個本地實例來連接監聽器?

相關問題