据我所知,到目前为止,病人可能需要一个沟通者界面来帮助传递这个位置。另外我不相信我可以从适配器类访问该片段,它必须在main方法中完成。
我该怎么做?
这是我的适配器类:
public class RouteAdapter extends RecyclerView.Adapter<RouteAdapter.ViewHolder> {
private static List<Routes> routes;
private static List<Routes.stations> stations;
private AdapterView.OnItemClickListener listener;
Communicator comm;
public RouteAdapter(List<Routes> routesList) {
routes = routesList;
stations = new ArrayList<>();
for (Routes routes : routesList) {
stations.addAll(routes.getmStationsList());
}
}
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public Button BtnRouteName;
public CardView cardView;
public TextView TvStationName;
private OnItemClickListener listener;
public ViewHolder(View itemView, OnItemClickListener listener) {
super(itemView);
TvStationName = (TextView) itemView.findViewById(R.id.textView);
cardView = (CardView) itemView.findViewById(R.id.cv);
//cardView.setOnClickListener(this);
final Context context = itemView.getContext();
BtnRouteName = (Button) itemView.findViewById(R.id.route_name);
BtnRouteName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
Routes s = routes.get(position);
Routes.stations og = stations.get(position);
if (listener != null)
listener.onItemClick(TvStationName.getText().toString(); //ERROR
}
});
}
}
@Override
public RouteAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.routes_card, parent, false);
//ViewHolder viewHolder = new ViewHolder(v);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(RouteAdapter.ViewHolder holder, int position) {
Routes rPosition = routes.get(position);
holder.setOnItemClickListener(listener); //ERROR
holder.BtnRouteName.setText(rPosition.getmRouteName());
holder.cardView.setTag(position);
}
@Override
public int getItemCount() {
return routes.size();
}
public void setOnItemClickListener(OnItemClickListener listener){
this.listener = (AdapterView.OnItemClickListener) listener;
}
public interface OnItemClickListener{
public void onItemClick(int position);
}
}
这是我的主要方法:
public class MainActivity extends AppCompatActivity implements Communicator {
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Gets the rv from the xml file (activity_main.xml)
mRecyclerView = (RecyclerView) findViewById(R.id.rv);
// use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
mRecyclerView.setHasFixedSize(true);
// use a linear layout manager
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
//This is a test fragment just loads a image nothing to really do w/ the problem
MainActivityFragment frag = new MainActivityFragment();
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.main_layout, frag, "frag1");
transaction.commit();
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
loadRV();
}
private void loadRV() {
TrolleyService trolleyService = TrolleyServiceProvider.createService(TrolleyService.class);
Call<List<Routes>> call = trolleyService.listRoutes();
call.enqueue(new Callback<List<Routes>>() {
@Override
public void onResponse(Response<List<Routes>> response, Retrofit retrofit) {
if (response.isSuccess()) {
mAdapter = new RouteAdapter(response.body());
mRecyclerView.setAdapter(mAdapter);
} else {
Log.d("Oops Something is wrong", response.message());
}
}
@Override
public void onFailure(Throwable t) {
Log.d("ERROR", t.getMessage());
}
});
}
}
我的一次尝试(请求): 我删除了我尝试过的大部分代码,但是这些代码都是这样的 主要活动:
MainActivityFragment frag = new MainActivityFragment();
FragmentA fragA = new FragmentA(); //Fragments i wanted to add
FragmentB fragB = new FragmentB(); //Fragments i wanted to add
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.main_layout, frag, "frag1");
transaction.commit();
@Override
public void respond(String data) {
FragmentManager manager = getFragmentManager();
FragmentB f2 = (FragmentB) manager.findFragmentById(R.id.textView);
f2.changeText(data); //This was a test to display the first name on list
}
我的Communicator课程
public interface Communicator {
public void respond(String data);
}
我在适配器类中的onClick
@Override
public void onClick(View v) {
int position = getAdapterPosition();
Routes s = routes.get(position);
Routes.stations og = stations.get(position);
comm.respond(og.getStationsName());
}
答案 0 :(得分:0)
将recyclerView放入片段中。
我假设你能够获得适配器的位置。将recyclelerview放入片段调用RV中,它的响应将在片段中显示为RVvalues。您使用名为PassRVValues
的接口RV片段中的代码:
public class RV extends Fragment{
int RVposition;
PassRVValues passRVValues;
//
your code for recyclerview and other things
//
RVposition = position_value_obtained;
passRVValues.sendToOtherFragment(RVposition);
这是接口的代码。创建一个只有接口的新java类。
public interface PassRVValues{
sendToOtherFragment(int value_from_RVFragment);
}
活动中的代码
public class MainActivity implements PassRVValues{
//
some code
//
@Override
public void sendToOtherFragment(int use_value_from_RVFragment){
//
Do something with data if you want
//
RVvalues Frag = (RVValues)getFragmentManager().findFragmentById(R.id.rvvalues);
Frag.ShowDataBasedOnPositionInRV(something_based_from_any_process_in_sendToOtherFragment_Method);
}
现在查看RVValues片段中的代码
public class RVValues extends Fragment{
//again any codes//
public void ShowDataBasedOnPositionInRV(int data_based_on_RV_position){
//do something//
}
这是以最简单的方式实现片段间通信的方法。希望这可以帮助! 干杯!
答案 1 :(得分:0)
不使用界面
的最简单方法这是你的片段类
public class RV extends Fragment{
// your code
}
您的通话活动
public class MainActivity{
// some code
public void setFragment(//params you want to pass){
FragmentManager fm = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.ll_container, new RV).commit();
}
}
您的适配器
public class Adapter extends RecyclerView.Adapter<HistoryAdapter.ViewHolder> {
Context context;
public Adapter(Context context){
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.layout, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return 0;
}
class ViewHolder extends RecyclerView.ViewHolder{
public ViewHolder(View itemView) {
super(itemView);
button //your button
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((MainActivity)context).setFragment(//params you want to pass);
}
});
}
}
}