我有一个带有四个网格元素 (2*2) 的 recyclerview,其工作方式类似于菜单。但是,当我点击它们时,没有显示涟漪效应。它只是将我带到下一个 Activity ,而没有任何视觉确认 View 已被按下。谁能帮忙?
主要 Activity
public class MainActivity extends AppCompatActivity implements MainMenuAdapter.OnItemClickListener {
Toolbar toolbar;
private static List<ViewModel> tileItems = new ArrayList<>();
static {
tileItems.add(new ViewModel("Activity", "#3F51B5", R.drawable.activity));
tileItems.add(new ViewModel("Profile", "#E91E63", R.drawable.profile));
tileItems.add(new ViewModel("Training", "#FF5722", R.drawable.training));
tileItems.add(new ViewModel("Diet", "#4CAF50", R.drawable.diet));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
MainAdapter adapter = new MainAdapter(tileItems, MainActivity.this);
recyclerView.setAdapter(adapter);
adapter.setOnItemClickListener(this);
// Toolbar
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
@Override
public void onBackPressed() {
this.moveTaskToBack(true);
// this.finishAffinity();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override public void onItemClick(View view, ViewModel viewModel) {
}
}
主适配器
public class MainAdapter extends RecyclerView.Adapter<MainMenuAdapter.ViewHolder> implements View.OnClickListener {
private List<ViewModel> items;
private OnItemClickListener onItemClickListener;
private Context context;
// Adapter constructor
public MainAdapter(List<ViewModel> items, Context context) {
this.items = items;
this.context = context;
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_item, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
final ViewModel dataItem = items.get(position);
viewHolder.colorBlock.setBackgroundColor(dataItem.getColor());
viewHolder.menuName.setText(dataItem.getName());
viewHolder.menuIcon.setImageResource(dataItem.getImage());
viewHolder.itemView.setTag(dataItem);
if (dataItem.getActivity() != null) {
viewHolder.colorBlock.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(context, dataItem.getActivity());
context.startActivity(i);
}
});
}
}
@Override
public int getItemCount() {
return items.size();
}
@Override public void onClick(final View v) {
// Give some time to the ripple to finish the effect
if (onItemClickListener != null) {
new Handler().postDelayed(new Runnable() {
@Override public void run() {
onItemClickListener.onItemClick(v, (ViewModel) v.getTag());
}
}, 200);
}
}
/** This is our ViewHolder class */
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView menuName;
public View colorBlock;
public ImageView menuIcon;
public ViewHolder(View convertView) {
super(convertView); // Must call super() first
menuName = (TextView) convertView.findViewById(R.id.menuName);
colorBlock = (View) convertView.findViewById(R.id.colorBlock);
menuIcon = (ImageView) convertView.findViewById(R.id.menuItem);
}
}
public interface OnItemClickListener {
void onItemClick(View view, ViewModel viewModel);
}
}
activity_main.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_below="@id/toolbar"
android:layout_width= "match_parent"
android:layout_height = "match_parent" />
</RelativeLayout>
主项目.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground">
<View
android:id="@+id/colorBlock"
android:layout_width="match_parent"
android:layout_height="170dp" />
<ImageView
android:id="@+id/menuItem"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_centerHorizontal="true"
android:padding="16dp"
/>
<TextView
android:id="@+id/menuName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:textColor="@android:color/white"
android:textSize="16sp"/>
</RelativeLayout>
最佳答案
如果将 main_item.xml 的背景设置为 ?android:selectableItemBackground 或 ?selectableItemBackground,就会出现涟漪效果(@Budius 在他的评论中是错误的)。我找到了对第二个的引用。但是,AndroidStudio 警告说它在 com.android.support:design 中是私有(private)的。我的应用程序在尝试使用该私有(private)版本时崩溃了。我猜第一个带有“android:”前缀,瞧,它有效。
也许你不小心设置了android:foreground?我试过了,但没有发现我的 RecyclerView 项目有任何变化。
更新后的 RelativeLayout 将是:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
android:background="?android:selectableItemBackground">
我还看到 android:background="?android:attr/selectableItemBackground" 可以启动涟漪。我还会提到 selectableItemBackground 不需要位于 main_item.xml 的根元素上。我在根项目中使用背景颜色,然后在嵌套的 ViewGroup 上设置 selectableItemBackground。
我的答案来自一个不使用 Material 设计 appcompat 的引用框架。我怀疑如果您使用的是 Material 设计 appcompat 支持库,会有不同。
关于android - 在 recyclerview 中触摸没有涟漪效应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31998325/
我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r
如何在Ruby中获取BasicObject实例的类名?例如,假设我有这个:classMyObjectSystem我怎样才能使这段代码成功?编辑:我发现Object的实例方法class被定义为returnrb_class_real(CLASS_OF(obj));。有什么方法可以从Ruby中使用它? 最佳答案 我花了一些时间研究irb并想出了这个:classBasicObjectdefclassklass=class这将为任何从BasicObject继承的对象提供一个#class您可以调用的方法。编辑评论中要求的进一步解释:假设你有对象
我在非Rails项目中使用ActiveRecord。在Rails中,我可以这样做:config.time_zone='EasternTime(US&Canada)'config.active_record.default_timezone='EasternTime(US&Canada)'但如果我不使用rails,我该如何设置时区? 最佳答案 ActiveRecord::Base.default_timezone='EasternTime(US&Canada)' 关于ruby-没有轨道的A
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
在我让另一个人重做我的前端UI之前,我的Rails应用程序运行平稳。我已经尝试解决此错误3天了。这是错误:Nosuchfileordirectory-identifyExtractedsource(aroundline#59):575859606162@post=Post.find(params[:id])authorize@postif@post.update_attributes(post_params)flash[:notice]="Postwasupdated."redirect_to[@topic,@post]else{"utf8"=>"✓","_method"=>"patc