我正在通过Big Nerd Ranch指南进行Android编程,而我正在接受第16章的挑战。挑战是为ListView创建EmptyView,然后在EmptyView上创建添加内容的按钮。我可以使用EmptyView,但是我不知道应该在哪里放置按钮。这是我的代码。

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消失的任何想法?

最佳答案

一开始我也遇到了这个挑战。我太想了!您现在可能已经解决了这个问题,但是我认为为他人发布答案将很有用。以下为我工作:


创建新的XML文件,并指定“空”和“列表”视图。
修改您现有的onCreateView方法以膨胀新的修改后的布局,其中包含您在XML中定义的“空”和“列表”视图。
创建一个新按钮并为该按钮设置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布局一起使用。我希望这有帮助。

08-04 17:07