Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从主活动访问CardView中的视图_Java_Android_Android Recyclerview_Android Cardview - Fatal编程技术网

Java 从主活动访问CardView中的视图

Java 从主活动访问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尚未创建 谢谢你的帮助 谢

所以我制作了多个不同的CardView布局并将其放入RecyclerView,每个CardView都有自己的类来处理视图。然后,我在MainActivity中有一个浮动操作按钮,我想用它作为我程序的启动程序,但我无法访问其中一个cardview中的chrono。那么如何从MainActivity访问其中一个CardView中的视图(Chrono)

我已经尝试从mainactivity使用findviewbyid,但它的结果始终为null,因为可能recyclerview尚未创建

谢谢你的帮助

谢谢

CustomAdapter.java

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];
}