findViewById() 在第二个活动中找不到 RecyclerView



我有一个带有回收库(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屏幕

详细说明屏幕

谢谢!

相关内容

最新更新