我有一个带有回收库(TrackingSrecycler(和一个适配器列出cardView,它可以正常工作。
当我单击某些cardView时,应用程序调用(意图(另一个活动(defactActivity(,它应列出另一个recyclerview(详细信息recycler(。
,但详细说明代码
RecyclerView detailsRecyclerView = findViewById(R.id.recycler_details_view);
不起作用
findviewbyid返回'null'
任何人可以帮我吗?
mainActivity.java
public class MainActivity extends AppCompatActivity {
public static final String TRACKING = "com.example.cooltracker.MESSAGE";
private RecyclerView recyclerView;
private TrackingsAdapter adapter;
private List<Tracking> trackingList;
private ProgressDialog pDialog;
private String webserviceURL;
private TextView total;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webserviceURL = "http://myWebServiceUrl.com/params";
---> recyclerView = findViewById(R.id.recycler_main_view); <--- Ok!!
trackingList = new ArrayList<>();
adapter = new TrackingsAdapter(this, trackingList);
total = findViewById(R.id.tvTotal);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 1);
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.addItemDecoration(new GridSpacingItemDecoration(1, dpToPx(5), true));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(adapter);
...
在TrackingsAdapter.java上,我将ClickListener拨打下一个屏幕
public class TrackingsAdapter extends RecyclerView.Adapter<TrackingsAdapter.MyViewHolder> {
private Context mContext;
private List<Tracking> trackingList;
public class MyViewHolder extends RecyclerView.ViewHolder {...}
@override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.tracking_card, parente, attachToRoot:false);
final MyViewHolder mViewHolder = new MyViewHolder(itemView);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder...){
...
...
...
//Here I set the click listener
holder.card.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getDetails(tracking.getTrack());
}
});
private void getDetails(String tracking){
//Call next screen DetailsActivity...
Intent intent = new Intent(mContext, DetailsActivity.class);
intent.putExtra(TRACKING, tracking);
mContext.startActivity(intent);
}
到目前为止,运行良好!!!代码调用下一个屏幕...
但是...
在下一个屏幕上还应具有列表视图(recyclerview(
defactActivity.java
public class DetailsActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private DetailsAdapter adapter;
private List<Tracking> detailList;
private ProgressDialog pDialog;
private String webserviceURL;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
//get intent
Intent intent = getIntent();
String tracking = intent.getStringExtra(MainActivity.TRACKING);
//set string in layout
TextView tvHeaderLine1 = findViewById(R.id.tvHeaderLine1);
tvHeaderLine1.setText(tracking);
webserviceURL = "http://werService.com/otherAction";
//THIS PART IS NOT WORKING ///
----> recyclerView = findViewById(R.id.recycler_detail_view); <----
System.out.println(recyclerView); // It's always returning NULL
detailList = new ArrayList<>();
adapter = new DetailsAdapter(this, detailList);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 1);
//recyclerView.setLayoutManager(mLayoutManager);
//recyclerView.setAdapter(adapter);
// prepare the loading Dialog
pDialog = new ProgressDialog(this);
pDialog.setMessage("Message");
pDialog.setCancelable(false);
...
...
}
}
当findViewById返回null时,它意味着它在您在call to setContentView((中设置的布局内的指定ID找到视图。
因此,基本上您在setContentView((方法中传递的布局,没有" recycler_details_view"的视图。
已解决!
首先我想...如果我使用的是回收器,为什么我需要两个?我用同样的方式使用...所以我设置
setContentView(R.layout.activity_main)
the DefactActivity.class和我使用了同样的...谢谢!!!
我现在将改进设计...
屏幕在这里...我至少需要10个声誉才能发布图像... =/
Mainactivity屏幕
详细说明屏幕
谢谢!