Java 如何将按钮添加到我的EmptyView?

Java 如何将按钮添加到我的EmptyView?,java,android,Java,Android,您好,我正在尝试将按钮插入空视图。我似乎唯一能开始工作的是EmptyText,当列表为空时,会显示一个文本值。此代码仅用于显示文本视图。如何将按钮成功添加到视图中 import java.util.ArrayList; import android.annotation.TargetApi; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.suppo

您好,我正在尝试将
按钮插入
空视图
。我似乎唯一能开始工作的是
EmptyText
,当列表为空时,会显示一个文本值。此代码仅用于显示
文本视图
。如何将按钮成功添加到视图中

import java.util.ArrayList;

import android.annotation.TargetApi;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.text.format.DateFormat;
import android.view.ActionMode;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView.MultiChoiceModeListener;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.robertrichardson.crimeproofassistant.R.string;

public class crimeListFragment extends ListFragment {

    private ArrayList<crime> mcrime;
    private boolean mSubtitleVisible;
    public static final String TAG = "crimeListFragment";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
        getActivity().setTitle(R.string.app_name);
        mcrime = crimeLab.get(getActivity()).getcrime();
        crimeAdapter adapter = new crimeAdapter(mcrime);
        setListAdapter(adapter);
        setRetainInstance(true);
        mSubtitleVisible = false;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view,  savedInstanceState);

        setEmptyText(getResources().getString(string.new_crime_attack_empty_desc));

        registerForContextMenu(getListView());
        setHasOptionsMenu(true);
}


    @TargetApi(11)
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent,
            Bundle savedInstanceState) {
          View v = super.onCreateView(inflater,  parent,  savedInstanceState);

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

        ListView listView = (ListView)v.findViewById(android.R.id.list);

        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
            // Use floating point context menus on Froyer and Gingerbread
            registerForContextMenu(listView);
        } else {
            // Use contextual action bar on Honeycomb and higher
            listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
            listView.setMultiChoiceModeListener(new MultiChoiceModeListener()  {

            // ActionMode.Callback methods
            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                MenuInflater inflater = mode.getMenuInflater();
                inflater.inflate(R.menu.crime_list_item_context, menu);
                return true;
            }

            public void onItemCheckedStateChanged(ActionMode mode, int position,
                    long id, boolean checked) {
            // required but not used in this implementation
             }

            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                switch (item.getItemId()) {
                case R.id.menu_item_delete_crime:
                    crimeAdapter adapter = (crimeAdapter)getListAdapter();
                    crimeLab crimeLab = crimeLab.get(getActivity());
                    for (int i = adapter.getCount() - 1; i >= 0; i--) {
                        if (getListView().isItemChecked(i)) {
                            crimeLab.deletecrime(adapter.getItem(i));
                        }
                    }
                    mode.finish();
                    adapter.notifyDataSetChanged();
                    return true;
                default:
                    return false;
                }

            }

            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                return false;
            // Required, but not used in this implementation
            }

            public void onDestroyActionMode(ActionMode mode) {

            }
        }); 
    }
        return v;
    }

    public void onListItemClick(ListView l, View v, int position, long id) {
        crime c = ((crimeAdapter)getListAdapter()).getItem(position);
        // Start crime Activity
        Intent i = new Intent(getActivity(), crimePagerActivity.class);
        i.putExtra(crimeFragment.EXTRA_crime_ID, c.getId());
        startActivity(i);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        ((crimeAdapter)getListAdapter()).notifyDataSetChanged();
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.fragment_crime_list, menu);
        MenuItem showSubtitle = menu.findItem(R.id.menu_item_show_subtitle);
        if (mSubtitleVisible && showSubtitle != null) {
            showSubtitle.setTitle(R.string.hide_subtitle);
        }
     }

    @TargetApi(11)
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.menu_item_new_crime:
            crime crime = new crime();
            crimeLab.get(getActivity()).addcrime(crime);
            Intent i = new Intent(getActivity(), crimePagerActivity.class);
            i.putExtra(crimeFragment.EXTRA_crime_ID,  crime.getId());
            startActivityForResult(i,0);
            return true;
        case R.id.menu_item_show_subtitle:
            if (getActivity().getActionBar().getSubtitle() != null) {
                getActivity().getActionBar().setSubtitle(R.string.subtitle);
                mSubtitleVisible = true;
                item.setTitle(R.string.hide_subtitle);
            } else {
                getActivity().getActionBar().setSubtitle(null);
                mSubtitleVisible = false;
                item.setTitle(R.string.show_subtitle);
            }
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
     }

    @Override
    public void onCreateContextMenu(ContextMenu menu,View v, ContextMenuInfo menuInfo) {
        getActivity().getMenuInflater().inflate(R.menu.crime_list_item_context, menu);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();
        int position = info.position;
        crimeAdapter adapter = (crimeAdapter)getListAdapter();
        crime crime = adapter.getItem(position);

        switch (item.getItemId()) {
           case R.id.menu_item_delete_crime:
               crimeLab.get(getActivity()).deletecrime(crime);
               adapter.notifyDataSetChanged();
               return true;
        }
        return super.onContextItemSelected(item);
    }

    private class crimeAdapter extends ArrayAdapter<crime> {
        public crimeAdapter(ArrayList<crime> crime) {
            super(getActivity(), 0, crime);
        }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        // If we weren't given a view, inflate one
        if (convertView == null) {
            convertView = getActivity().getLayoutInflater()
                    .inflate(R.layout.list_item_crime, null);
        }  

        // Enter the view of this crime Attack
        crime c = getItem(position);

        TextView titleTextView =
                (TextView)convertView.findViewById(R.id.crime_list_item_titleTextView);
        titleTextView.setText(c.getTitle());
        TextView dateTextView =
                (TextView)convertView.findViewById(R.id.crime_list_item_dateTextView);
        dateTextView.setText(DateFormat.format("EEEE, MMM dd, yyyy  hh : mm a", c.getDate()).toString());

        CheckBox resolvedCheckBox =
                (CheckBox)convertView.findViewById(R.id.crime_list_item_resolvedCheckBox);
        resolvedCheckBox.setChecked(c.isResolved());

        return convertView;
    }
}

    @Override
    public void onResume() {
        super.onResume();
        ((crimeAdapter)getListAdapter()).notifyDataSetChanged();
    }
 }    


Here's my XML:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:background="#f2f3f4"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  >
 <ListView
  android:id="@android:id/list"
  android:background="#f2f3f4"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  >
 </ListView>
 <linearLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent" 
  android:background="#f2f3f4"
  android:orientation="vertical"
  >
 <TextView
  android:id="@android:id/empty"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:paddingLeft="4dp"
  android:paddingRight="4dp"
  android:text="@string/new__empty_desc" 
  />
 <Button
  android:id="@+id/addButton"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:paddingLeft="4dp"
  android:paddingRight="4dp"
  android:text="@string/new_attack_empty" 
  />
 </linearLayout>
</FrameLayout>
import java.util.ArrayList;
导入android.annotation.TargetApi;
导入android.content.Intent;
导入android.os.Build;
导入android.os.Bundle;
导入android.support.v4.app.ListFragment;
导入android.text.format.DateFormat;
导入android.view.ActionMode;
导入android.view.ContextMenu;
导入android.view.ContextMenu.ContextMenuInfo;
导入android.view.LayoutInflater;
导入android.view.Menu;
导入android.view.MenuInflater;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.ViewGroup;
导入android.widget.AbsListView.MultichoiceModelListener;
导入android.widget.AdapterView;
导入android.widget.AdapterView.AdapterContextMenuInfo;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.CheckBox;
导入android.widget.ListAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
导入com.robertrichardson.crimeproofassistant.R.string;
公共类crimeListFragment扩展了ListFragment{
私人ArrayList McCrime;
私有布尔msubtitlevible;
公共静态最终字符串TAG=“crimeListFragment”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
设置选项菜单(真);
getActivity().setTitle(R.string.app_name);
mcinite=crimeLab.get(getActivity()).getcrime();
crimeAdapter适配器=新的crimeAdapter(mcrime);
setListAdapter(适配器);
setRetainInstance(真);
msubtitlevible=false;
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
super.onViewCreated(视图,savedInstanceState);
setEmptyText(getResources().getString(string.new\u crime\u attack\u empty\u desc));
registerForContextMenu(getListView());
设置选项菜单(真);
}
@塔吉塔皮(11)
@凌驾
创建视图上的公共视图(布局、充气器、视图组父级、,
Bundle savedInstanceState){
视图v=super.onCreateView(充气机、父级、savedInstanceState);
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.HONEYCOMB){
如果(msubtitlevible){
getActivity().getActionBar().setSubtitle(R.string.subtitle);
}
}
ListView ListView=(ListView)v.findViewById(android.R.id.list);
if(Build.VERSION.SDK\u INT=0;i--){
如果(getListView().isItemChecked(i)){
crimeLab.deletecrime(adapter.getItem(i));
}
}
mode.finish();
adapter.notifyDataSetChanged();
返回true;
违约:
返回false;
}
}
公共布尔onPrepareActionMode(操作模式,菜单){
返回false;
//必需,但在此实现中未使用
}
公共void onDestroyActionMode(ActionMode模式){
}
}); 
}
返回v;
}
public void onListItemClick(列表视图l、视图v、整数位置、长id){
犯罪c=((crimeAdapter)getListAdapter()).getItem(位置);
//开始犯罪活动
Intent i=新的Intent(getActivity(),crimepageActivity.class);
i、 puttera(crimeFragment.EXTRA_crime_ID,c.getId());
星触觉(i);
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
((crimeAdapter)getListAdapter()).notifyDataSetChanged();
}
@凌驾
创建选项菜单(菜单菜单,菜单充气机){
super.onCreateOptions菜单(菜单,充气机);
充气器。充气(右菜单。碎片列表,菜单);
MenuItem showSubtitle=menu.findItem(R.id.menu\u项目\u show\u字幕);
if(msubtitlevible&&showSubtitle!=null){
showstitle.setTitle(R.string.hide_subtitle);
}
}
@塔吉塔皮(11)
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案件R.id.菜单项新犯罪:
犯罪=新犯罪();
crimeLab.get(getActivity()).addcrime(crime);
意图i=新意图(getActivity(),crimePagerActiv
public class MainActivity extends Activity {

    private CustomBaseAdapter customBaseAdapter;
    private ListView lv;
    private Button btn;



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

        FrameLayout fl = new FrameLayout(this);
        btn = new Button(this);
        btn.setText("Hit me");

        lv = new ListView(this);

        customBaseAdapter = new CustomBaseAdapter(this);
        lv.setAdapter(customBaseAdapter);

        fl.addView(lv);
        fl.addView(btn);
        setContentView(fl);

        handleVisbility();
    }

    public void handleVisbility() {
        if (customBaseAdapter.getCount() == 0) {
            lv.setVisibility(View.GONE);
            btn.setVisibility(View.VISIBLE);
        } else {
            lv.setVisibility(View.VISIBLE);
            btn.setVisibility(View.GONE);
        }
    }

    public class CustomBaseAdapter extends BaseAdapter {

        private Context context;
        View superView;

        public CustomBaseAdapter(Context context) {
            this.context = context;
        }

        @Override
        public int getCount() {
            return 1;
        }

        @Override
        public Object getItem(int arg0) {
            return new Object();
        }

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

        @Override
        public View getView(int arg0, View arg1, ViewGroup arg2) {

            FrameLayout fl = new FrameLayout(context);

            Button btn = new Button(context);
            btn.setText("Hello, im a Button");

            btn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    Toast.makeText(context, "Yay hit me again", Toast.LENGTH_LONG).show();
                }
            });

            fl.addView(btn);

            return fl;
        }

    }

}