Intent GridLayout到4个活动
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Intent GridLayout到4个活动相关的知识,希望对你有一定的参考价值。
我有GridLayout
里面有CardView
。我想为4种不同的活动创建一个Intent。我只能执行一个Intent。我不知道我是否应该使用Else If
或case
。谢谢你的帮助。这是我的代码。
GridLayout mainGrid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dashboard);
mainGrid = (GridLayout)findViewById(R.id.grid);
setSingleEvent(mainGrid);
}
private void setSingleEvent(GridLayout mainGrid) {
for (int i=0;i<mainGrid.getChildCount();1++)
{
CardView cardView = (CardView)mainGrid.getChildAt(i);
final int final1= i;
cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i=new Intent(DashboardActivity.this,MapsActivity.class);
startActivity(i);
}
});
}
}
答案
我认为你的问题来自于缺乏对程序执行顺序的理解。如果你插入一个循环然后你放入一个匿名类,因为View.onViewClickListener
的情况是正常的,你将只有一个结果,因为你打破了for循环。
要走的路应该是不要使用for循环,而是根据你想要获得的内容分配不同的Explicit Intents。
编辑。在您的用例的基础上,您需要从适配器触发Intent。请参阅here和here,基本上你需要使用android SDK功能,告诉你哪个卡被点击mRecyclerView.getChildLayoutPosition(view);
然后根据你的需要你可能(或不)传递switch case
用于教育目的,虽然可能不是最优雅有效的解决方法。
另一答案
如果您希望根据点击的CardView
启动不同的Activity,请尝试以下操作:
private void setSingleEvent(GridLayout mainGrid) {
mainGrid.getChildAt(0).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(i);
}
});
mainGrid.getChildAt(1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(i);
}
});
//do this for all 4 cardViews.
}
简而言之:分别设置所有意图。
以上是关于Intent GridLayout到4个活动的主要内容,如果未能解决你的问题,请参考以下文章
Android第一行代码学习笔记六---Intent向活动传递数据