- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定这是否重复,我尝试过的可能的补救措施无效。 (下面会提到)
我目前正在为我正在做的项目使用 Theme.AppCompat.NoActionBar
并且正在使用 android.support.design.widget.AppBarLayout
和 android.support.design.widget.CollapsingToolbarLayout
与 android.support.v7.widget.Toolbar
串联。
选项菜单旨在与工具栏菜单分开,以便
以下是代码。那些用双星号表示的是我认为是 onCreate()
1) VacancyList.java : onCreate()
public class VacancyList extends AppCompatActivity
{
private final static ArrayList <String> ELEMENTS= new ArrayList<>(Arrays.asList("restaurantID", "restaurantName", "restaurantType", "ST_ASText(restaurantLoc)", "restaurantLot", "restaurantVacancy", "restaurantOwner", "restaurantContact","restaurantEmail"));
private final static String TAG_RESULT = "result";
private Toolbar toolBar;
private RecyclerView recyclVw;
private RestInfoAdapter adapter;
private SwipeRefreshLayout refresh;
private ArrayList<RestInfo> rInf_LIST;
//Temporary
private TextView txtVw;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vacancy_list);
**toolBar = (Toolbar)findViewById(R.id.toolbar);
toolBar.inflateMenu(R.menu.toolbar_menu);**
rInf_LIST = new ArrayList<>();
//AsyncTask calls
new ListGetterTask(true).execute();
//Setup Recycler View with the appropriate adapter and layout.
recyclVw = (RecyclerView)findViewById(R.id.recyclerView);
adapter = new RestInfoAdapter(this, rInf_LIST);
GridLayoutManager glm = new GridLayoutManager(this, 1);
recyclVw.setLayoutManager(glm);
recyclVw.setAdapter(adapter);
refresh = (SwipeRefreshLayout)findViewById(R.id.refresh);
refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Handler().post(new Runnable() {
@Override
public void run() {
new ListGetterTask(false).execute();
Toast.makeText(VacancyList.this, "ListGetter Executed", Toast.LENGTH_SHORT).show();
refresh.setRefreshing(false);
}
});
}
});
}
2) VacancyList.java : onCreateOptionsMenu()
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.toolbar_menu, menu);
return true;
}
3) VacancyList.java : onOptionsItemSelected()
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.aboutPage:
{
startActivity(new Intent(VacancyList.this, About.class));
return true;
}
case R.id.logOut:
{
String prefName = getString(R.string.prefName), key0 = getString(R.string.key0), key1 = getString(R.string.key1), key2 = getString(R.string.key2);
SharedPreferences sharedPref = getSharedPreferences(prefName, Context.MODE_PRIVATE);
SharedPreferences.Editor edtr = sharedPref.edit();
edtr.putString(key0, "loggedOut");
edtr.remove(key1);
edtr.remove(key2);
edtr.apply();
startActivity(new Intent(VacancyList.this, MainActivity.class));
return true;
}
default:
return super.onOptionsItemSelected(item);
}
}
4) activity_vacancy_list.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="@dimen/detail_backdrop_height"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="48dp"
app:expandedTitleMarginEnd="64dp">
<ImageView
android:id="@+id/backdrop"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax"
android:contentDescription="" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|start"
app:layout_collapseMode="parallax"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/sortBy"
android:text="@string/txtVWPrompt"
android:textSize="@dimen/spinner_text_size"
android:layout_marginLeft="40dp"
android:layout_marginStart="40dp"
android:layout_marginRight="40dp"
android:layout_marginEnd="40dp"/>
<Spinner
android:id="@+id/spinner1"
android:spinnerMode="dropdown"
android:dropDownVerticalOffset="90dp"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:entries="@array/sorting_type"/>
</LinearLayout>
**<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_collapseMode="pin" >**
<android.support.v7.widget.SearchView
android:id="@+id/search"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</android.support.v7.widget.Toolbar>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/recyclerview_content"/>
</android.support.v4.widget.NestedScrollView>
</android.support.v4.widget.SwipeRefreshLayout>
</android.support.design.widget.CoordinatorLayout>
5) toolbar_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/tools">
<item android:id="@+id/aboutPage"
android:title="@string/about_page"
app:showAsAction="never"
android:clickable="false"/>
<item android:id="@+id/logOut"
android:title="@string/logout"
app:showAcAction="never"
android:clickable="false"/>
</menu>
按下其中一项时的 Logcat 输出。
11-01 04:13:06.317 31673-31673/fyp.inrestaurant W/InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed.
11-01 04:13:12.517 31673-31673/fyp.inrestaurant W/InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed.
我实际上不太明白答案在说什么,因为答案只表明 onCreateOptionsMenu
会发生什么,而 onOptionsItemSelected()
没有显示任何变化。因此,我唯一尝试过的就是将 android:clickable = false
中的相应项目放入 toolbar_menu.xml 文件中。
Custom Toolbar onOptionsItemSelected not working
1) RestInfo.java
//For adapter, no direct relationship with restaurant info
public class RestInfo implements Parcelable {
//Displayed in CardView (and RestaurantInfo)
//protected ImageView imgVw;
protected String restName;
protected String restLot;
protected String restLoc;
protected int restVacant;
//Displayed in RestaurantInfo
protected String restType;
protected String restNo;
protected String restEmail;
//DIsplayed for Admin
protected String restOwn;
protected int restID;
//Status
private boolean objIS_EMPTY = true;
public RestInfo(int id, String name, String type, String loc, String lot, int vacant, String own, String no, String email) {
init(id, name, type, loc, lot, vacant, own, email, no);
}
public boolean getEMPTY_Status(){
return objIS_EMPTY;
}
private boolean isEmpty(){
return restName.equals("") && restLot.equals("") && restLoc.equals("") && restVacant == 0 && restType.equals("") && restNo.equals("") && restEmail.equals("") && restOwn.equals("");
}
private void init(int id, String name, String type, String loc, String lot, int vacant, String own, String no, String email)
{
restID = id;
restName = name;
restLot = lot;
restLoc = loc;
restVacant = vacant;
restType = type;
restNo = no;
restEmail = email;
restOwn = own;
objIS_EMPTY = isEmpty();
}
public String getRestName(){
return restName;
}
public String getRestLot(){
return restLot;
}
public String getRestLoc(){
return restLoc;
}
public int getResVacant(){
return restVacant;
}
public String getRestType(){
return restType;
}
public String getRestNo(){
return restNo;
}
public String getRestEmail(){
return restEmail;
}
public String getRestOwn(){
return restOwn;
}
public int getRestID(){
return restID;
}
public boolean checkFields(RestInfo arg){
return arg.getRestName().equals(this.getRestName()) && arg.getRestEmail().equals(this.getRestEmail())
&& arg.getRestLoc().equals(this.getRestLoc()) && arg.getRestLot().equals(this.getRestLot())
&& arg.getRestNo().equals(this.getRestNo()) && arg.getRestType().equals(this.getRestType())
&& arg.getRestOwn().equals(this.getRestOwn()) && arg.getResVacant() == this.getResVacant();
}
protected RestInfo(Parcel in) {
//imgVw = (ImageView) in.readValue(ImageView.class.getClassLoader());
restName = in.readString();
restLot = in.readString();
restLoc = in.readString();
restVacant = in.readInt();
restType = in.readString();
restNo = in.readString();
restEmail = in.readString();
restOwn = in.readString();
restID = in.readInt();
objIS_EMPTY = in.readByte() != 0x00;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
//dest.writeValue(imgVw);
dest.writeString(restName);
dest.writeString(restLot);
dest.writeString(restLoc);
dest.writeInt(restVacant);
dest.writeString(restType);
dest.writeString(restNo);
dest.writeString(restEmail);
dest.writeString(restOwn);
dest.writeInt(restID);
dest.writeByte((byte) (objIS_EMPTY ? 0x01 : 0x00));
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<RestInfo> CREATOR = new Parcelable.Creator<RestInfo>() {
@Override
public RestInfo createFromParcel(Parcel in) {
return new RestInfo(in);
}
@Override
public RestInfo[] newArray(int size) {
return new RestInfo[size];
}
};
}
2) RestInfoAdapter.java
public class RestInfoAdapter extends RecyclerView.Adapter<RestInfoAdapter.RestInfo_ViewHolder>
{
private Context context;
private ArrayList<RestInfo> rInf_LIST;
//Java Array starts at 0
int selectedItemID = -1;
public RestInfoAdapter(Context mContext, ArrayList<RestInfo> rInf)
{
this.context = mContext;
rInf_LIST = rInf;
}
@Override
public RestInfo_ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View itemVw = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, parent, false);
return new RestInfo_ViewHolder(itemVw);
}
@Override
public void onBindViewHolder(final RestInfo_ViewHolder holder, int position)
{
RestInfo rInf = rInf_LIST.get(position);
holder.rName.setText(rInf.getRestName());
holder.rLot.setText(rInf.getRestLot());
holder.rVacancy_PROGBAR.setProgress(rInf.getResVacant());
holder.progBarVal.setText(Integer.toString(rInf.getResVacant()/10));
}
@Override
public int getItemCount()
{
return rInf_LIST.size();
}
public class RestInfo_ViewHolder extends RecyclerView.ViewHolder
{
public TextView rName, rLot, progBarVal;
public ProgressBar rVacancy_PROGBAR;
public RestInfo_ViewHolder(final View itemView)
{
super(itemView);
rName = (TextView)itemView.findViewById(R.id.txtVw_RestName);
rLot = (TextView)itemView.findViewById(R.id.txtVw_RestLot);
progBarVal = (TextView)itemView.findViewById(R.id.progBarTextValue);
rVacancy_PROGBAR = (ProgressBar)itemView.findViewById(R.id.progBar);
itemView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
selectedItemID = getAdapterPosition();
Intent intent = new Intent(context, RestaurantInfo.class);
//Commented out
//Reason : Much better object passing method is used
//ArrayList<RestInfo> temp = new ArrayList<>();
//temp.add(rInf_LIST.get(selectedItemID));
//intent.putParcelableArrayListExtra("selected_Rest", temp);
intent.putExtra("selected_Rest", rInf_LIST.get(selectedItemID));
context.startActivity(intent);
}
});
}
}
}
最佳答案
感谢@DeeV,问题出在有工具栏但没有代码告诉应用程序该工具栏被用作操作栏的部分。
因此,添加setSupportActionBar(toolBar);
即可解决问题。
onCreate()
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vacancy_list);
devOnly = (FloatingActionButton)findViewById(R.id.devOnly);
devOnly.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String prefName = getString(R.string.prefName), key0 = getString(R.string.key0), key1 = getString(R.string.key1), key2 = getString(R.string.key2);
SharedPreferences sharedPref = getSharedPreferences(prefName, Context.MODE_PRIVATE);
SharedPreferences.Editor edtr = sharedPref.edit();
edtr.putString(key0, "loggedOut");
edtr.remove(key1);
edtr.remove(key2);
edtr.apply();
startActivity(new Intent(VacancyList.this, MainActivity.class));
}
});
toolBar = (Toolbar)findViewById(R.id.toolbar);
toolBar.inflateMenu(R.menu.toolbar_menu);
setSupportActionBar(toolBar);
rInf_LIST = new ArrayList<>();
//AsyncTask calls
new ListGetterTask(true).execute();
//Setup Recycler View with the appropriate adapter and layout.
recyclVw = (RecyclerView)findViewById(R.id.recyclerView);
adapter = new RestInfoAdapter(this, rInf_LIST);
GridLayoutManager glm = new GridLayoutManager(this, 1);
recyclVw.setLayoutManager(glm);
recyclVw.setAdapter(adapter);
refresh = (SwipeRefreshLayout)findViewById(R.id.refresh);
refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Handler().post(new Runnable() {
@Override
public void run() {
new ListGetterTask(false).execute();
Toast.makeText(VacancyList.this, "ListGetter Executed", Toast.LENGTH_SHORT).show();
refresh.setRefreshing(false);
}
});
}
});
}
关于安卓 : onOptionsItemSelected() does not respond,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40350297/
对于 onOptionsItemSelected 方法,只有在单击项目时才会调用此方法,对吗?如果在该 Activity 中单击了一个项目,但由于某些奇怪的原因,程序员没有 if 语句来检查该项目的
我有一个可以包含多个 fragment 的 Activity 。每个 fragment 都可以在 ActionBar 中有自己的菜单项。到目前为止这工作正常,每个项目都是可点击的并执行所需的操作。 我
我对这段代码感到困惑,我有 6 个菜单项,每个菜单项我希望它在 Web View 上加载不同的网页,但我看不到我在哪里可以说当选择第 3 项时执行此操作,有人可以帮忙吗? @Override
我的 fragment 上有这个调用 @Override public boolean onOptionsItemSelected(MenuItem item) { Toast
使用 Android Studio,我正在为我的应用程序创建设置(这是我第一次这样做)。我遇到了 onOptionsItemSelected 问题,我不知道如何继续。这是我的 LogCat: FATA
我有一个实现 onCreateOptionsMenu 方法的顶级 TabHost。我希望子 Activity (选项卡内的子 Activity )能够通过 onOptionsItemSelected
如何避免双击我的示例,任何解决方案? @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getI
我对 public boolean onOptionsItemSelected(MenuItem item) 有问题。 我的代码: public boolean onOptionsItemSelect
我的操作栏上有两个按钮,一个注销按钮和一个创建新消息按钮。但是,如果我单击创建新消息按钮(什么都不应该发生),它会让我退出。我的代码设置为它应该做的。有什么建议吗? @Override pub
我是 Android 开发的新手。 在我的 MainActivity.java 文件中,我声明了一个 onOptionsItemSelected(MenuItem menu) 方法,允许用户在当前 M
我遇到过这样一种情况,我需要为一个项目的子菜单实现 onOptionsItemSelected 监听器。菜单 xml 文件如下所示:
我不确定这是否重复,我尝试过的可能的补救措施无效。 (下面会提到) 我目前正在为我正在做的项目使用 Theme.AppCompat.NoActionBar 并且正在使用 android.support
我在 Android 中的一项 Activity 中有一个抽屉导航。我还在同一 Activity 的操作栏中添加了几个操作按钮和一个操作溢出。现在,问题在于处理抽屉导航项目、操作按钮和操作溢出菜单的选
我已经为我的数据库类创建了一个选项菜单。启动选项菜单后,我想通过单击指定按钮进行所需的 Activity 。 但问题是,如果我单击任何选项,我将被定向到 MainMenu.class。任何想法为什么会
我是 Android 的新手,如果我的问题看起来很简单,我很抱歉。我昨晚整晚都在查找它,但找不到解决方案(这让我觉得我可能在我试图实现的目标上存在根本缺陷)。 基本上,我试图从 onOptionsIt
我正在使用我的 fragment 处理返回功能。我使用操作栏作为返回按钮,但函数 onOptionsItemSelected 不起作用(甚至可能未调用该函数) 此代码在我的 FragmentActiv
我的操作栏中有一个菜单项列表。每个项目点击应该触发不同的方法。但是永远不会调用 onOptionsItemSelected。 这是在 MainActivity 中定义 actionbar 的方式: p
我有一个带有两个按钮的 onOptionsItemSelected 方法,我可以通过单击其中一个按钮来更改子项的值。 一个按钮是“完成”,另一个是“进行中”。 我单击完成按钮,它正确地更改了子值,然后
我使用 Sherlock 的操作栏。我正在尝试将其实现到我的应用程序中。但似乎我错过了一些让它发挥作用的东西。请检查我的代码。当我点击操作按钮时,我的应用程序没有做任何事情。下面是我的代码和我的 xm
我目前正在开发一款 Android 应用。我想使用操作栏中的应用程序图标导航到“主页” Activity 。我继续阅读 this所有需要做的就是添加一个 onOptionsItemSelected 并
我是一名优秀的程序员,十分优秀!