Java 从主活动访问CardView中的视图
所以我制作了多个不同的CardView布局并将其放入RecyclerView,每个CardView都有自己的类来处理视图。然后,我在MainActivity中有一个浮动操作按钮,我想用它作为我程序的启动程序,但我无法访问其中一个cardview中的chrono。那么如何从MainActivity访问其中一个CardView中的视图(Chrono) 我已经尝试从mainactivity使用findviewbyid,但它的结果始终为null,因为可能recyclerview尚未创建 谢谢你的帮助 谢谢 CustomAdapter.javaJava 从主活动访问CardView中的视图,java,android,android-recyclerview,android-cardview,Java,Android,Android Recyclerview,Android Cardview,所以我制作了多个不同的CardView布局并将其放入RecyclerView,每个CardView都有自己的类来处理视图。然后,我在MainActivity中有一个浮动操作按钮,我想用它作为我程序的启动程序,但我无法访问其中一个cardview中的chrono。那么如何从MainActivity访问其中一个CardView中的视图(Chrono) 我已经尝试从mainactivity使用findviewbyid,但它的结果始终为null,因为可能recyclerview尚未创建 谢谢你的帮助 谢
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private int[] mCardTypes;
public static final int TIME = 0;
public static final int MAP = 1;
public static final int COST = 2;
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View itemView) {
super(itemView);
}
}
public CustomAdapter(MainActivity main, int[] cardTypes) {
this.main = main;
mCardTypes = cardTypes;
}
public class ParkTimeViewHolder extends ViewHolder {
Chronometer mTotalTime;
Chronometer mRemainingTime;
public ParkTimeViewHolder(View itemView) {
super(itemView);
this.mTotalTime = (Chronometer) itemView.findViewById(R.id.chrono_total);
this.mRemainingTime = (Chronometer) itemView.findViewById(R.id.chrono_remaining);
// i can only run choro.start() here
}
}
public class MapViewHolder extends ViewHolder {
//MapView
public MapViewHolder(View itemView) {
super(itemView);
// TODO: 24-Dec-15 add map view
}
}
public class CostViewHolder extends ViewHolder {
TextView mCost;
public CostViewHolder(View itemView) {
super(itemView);
this.mCost = (TextView) itemView.findViewById(R.id.text_view_cost);
mCost.setText("20000");
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v;
if (viewType == TIME) {
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_view_time, parent, false);
return new ParkTimeViewHolder(v);
} else if (viewType == MAP) {
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_view_map, parent, false);
return new MapViewHolder(v);
} else {
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_view_cost, parent, false);
return new CostViewHolder(v);
}
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if(holder.getItemViewType() == TIME) {
ParkTimeViewHolder myHolder = (ParkTimeViewHolder) holder;
} else
if(holder.getItemViewType() == MAP) {
MapViewHolder myHolder = (MapViewHolder) holder;
} else
if(holder.getItemViewType() == COST) {
CostViewHolder myHolder = (CostViewHolder) holder;
}
}
@Override
public int getItemCount() {
return mCardTypes.length;
}
@Override
public int getItemViewType(int position) {
return mCardTypes[position];
}
公共类CustomAdapter扩展了RecyclerView.Adapter{
私有int[]mCardTypes;
公共静态最终整数时间=0;
公共静态最终整数映射=1;
公共静态最终成本=2;
//创建此变量
专用静态驻车时间视窗持有人驻车时间视窗持有人;
//在mainactivity中调用此函数
公共静态void startChrono(){
if(驻车时间视图持有人!=null){
//使用parkTimeViewholder变量在此处开始计时
}
}
公共静态类ViewHolder扩展了RecyclerView.ViewHolder{
公共视图持有者(视图项视图){
超级(项目视图);
}
}
公共CustomAdapter(MainActivity main,int[]cardTypes){
this.main=main;
mCardTypes=cardTypes;
}
公共类驻车时间视窗持有者扩展了视窗持有者{
天文钟MTO时间;
天文钟磁共振成像时间;
公共停车时间视图持有人(查看项目视图){
超级(项目视图);
this.mTotalTime=(Chronometer)itemView.findViewById(R.id.chrono_总计);
this.mRemainingTime=(Chronometer)itemView.findViewById(R.id.chrono_剩余);
//我只能在这里运行choro.start()
}
}
公共类MapViewHolder扩展了ViewHolder{
//地图视图
公共地图视图持有者(查看项目视图){
超级(项目视图);
//待办事项:2015年12月24日添加地图视图
}
}
公共类CostViewHolder扩展了ViewHolder{
文本视图mCost;
公共成本视图持有人(查看项目视图){
超级(项目视图);
this.mCost=(TextView)itemView.findViewById(R.id.text\u view\u cost);
mCost.setText(“20000”);
}
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
观点五;
如果(viewType==时间){
v=LayoutInflater.from(parent.getContext())
.充气(R.layout.card\u view\u time,parent,false);
返回新的驻车时间视图保持架(v);
}else if(viewType==MAP){
v=LayoutInflater.from(parent.getContext())
.充气(R.layout.card\u view\u map,父级,假);
返回新的MapViewHolder(v);
}否则{
v=LayoutInflater.from(parent.getContext())
.充气(R.layout.card\u view\u cost,parent,false);
返回新的CostViewHolder(v);
}
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
if(holder.getItemViewType()=时间){
停车时间视图持有人myHolder=(停车时间视图持有人)持有人;
//启动parkTimeViewholder变量
this.parkTimeViewholder=myHolder;
}否则
if(holder.getItemViewType()==MAP){
MapViewHolder myHolder=(MapViewHolder)holder;
}否则
if(holder.getItemViewType()=成本){
CostViewHolder myHolder=(CostViewHolder)holder;
}
}
@凌驾
public int getItemCount(){
返回mCardTypes.length;
}
@凌驾
public int getItemViewType(int位置){
返回mCardTypes[position];
}
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private RecyclerView mRecyclerView;
private CustomAdapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private Chronometer mTotalChrono;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mRecyclerView = (RecyclerView) findViewById(R.id.recycle_view_main_activity);
mLayoutManager = new LinearLayoutManager(MainActivity.this);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new CustomAdapter(this, new int[]{CustomAdapter.TIME, CustomAdapter.COST});
mRecyclerView.setAdapter(mAdapter);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.fab) {
Snackbar.make(v, "Started", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
// i need to run chrono.start(); from here
}
}
@Override
protected void onStart() {
super.onStart();
}
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private int[] mCardTypes;
public static final int TIME = 0;
public static final int MAP = 1;
public static final int COST = 2;
// create this variable
private static ParkTimeViewHolder parkTimeViewholder;
//call this function in mainactivity
public static void startChrono(){
if(parkTimeViewholder!=null){
// start chrono here using parkTimeViewholder variable
}
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View itemView) {
super(itemView);
}
}
public CustomAdapter(MainActivity main, int[] cardTypes) {
this.main = main;
mCardTypes = cardTypes;
}
public class ParkTimeViewHolder extends ViewHolder {
Chronometer mTotalTime;
Chronometer mRemainingTime;
public ParkTimeViewHolder(View itemView) {
super(itemView);
this.mTotalTime = (Chronometer) itemView.findViewById(R.id.chrono_total);
this.mRemainingTime = (Chronometer) itemView.findViewById(R.id.chrono_remaining);
// i can only run choro.start() here
}
}
public class MapViewHolder extends ViewHolder {
//MapView
public MapViewHolder(View itemView) {
super(itemView);
// TODO: 24-Dec-15 add map view
}
}
public class CostViewHolder extends ViewHolder {
TextView mCost;
public CostViewHolder(View itemView) {
super(itemView);
this.mCost = (TextView) itemView.findViewById(R.id.text_view_cost);
mCost.setText("20000");
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v;
if (viewType == TIME) {
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_view_time, parent, false);
return new ParkTimeViewHolder(v);
} else if (viewType == MAP) {
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_view_map, parent, false);
return new MapViewHolder(v);
} else {
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_view_cost, parent, false);
return new CostViewHolder(v);
}
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if(holder.getItemViewType() == TIME) {
ParkTimeViewHolder myHolder = (ParkTimeViewHolder) holder;
//initiate parkTimeViewholder variable
this.parkTimeViewholder = myHolder;
} else
if(holder.getItemViewType() == MAP) {
MapViewHolder myHolder = (MapViewHolder) holder;
} else
if(holder.getItemViewType() == COST) {
CostViewHolder myHolder = (CostViewHolder) holder;
}
}
@Override
public int getItemCount() {
return mCardTypes.length;
}
@Override
public int getItemViewType(int position) {
return mCardTypes[position];
}