2016-01-18 91 views
0

我有一個BaseActivity擴展活動有一個RecyclerView在其中。 我想在所有活動中繼承此RecyclerView。因此,對於我使用的每個活動,它都會擴展BaseActivity。顯示從一個父活動在所有的孩子活動在android中

但是,如果我在Child Activity上使用setContentView的不同XML佈局,則BaseActivity中的RecyclerView不可見。

BaseActivity.java

public class BaseActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_base); 

     RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); 


     baseRecyclerModel itemsData[] = { new baseRecyclerModel("Help",R.drawable.help), 
       new baseRecyclerModel("Delete",R.drawable.delete), 
       new baseRecyclerModel("Cloud",R.drawable.cloud)}; 


     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 

     baseRecyclerAdapter mAdapter = new baseRecyclerAdapter(itemsData); 

     recyclerView.setAdapter(mAdapter); 

     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
    } 

ChildActivity1.java

public class ChildActivity1 extends BaseActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_get_mobile_number); 



    } 

什麼可能是一個可能的解決方法或解決方案?

回答

1

你沒有打電話給setContentView()在BaseActivity.java。 爲BaseActivity.java中的RecyclerView(例如create())初始化了一個獨立的函數。在ChildActivity1調用setContentView()create()。 然後在activity_get_mobile_number.xml中包含activity_base.xml

public class BaseActivity extends Activity { 

    @Override 
    protected void create() { 
     RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); 

     baseRecyclerModel itemsData[] = { new baseRecyclerModel("Help",R.drawable.help), 
      new baseRecyclerModel("Delete",R.drawable.delete), 
      new baseRecyclerModel("Cloud",R.drawable.cloud)}; 


     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 

     baseRecyclerAdapter mAdapter = new baseRecyclerAdapter(itemsData); 

     recyclerView.setAdapter(mAdapter); 

     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
    } 
} 

public class ChildActivity1 extends BaseActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_get_mobile_number); 
     create(); 
    } 
} 
1

通過在您的ChildActivity中調用setContentView,您可以有效地將BaseActivity佈局替換爲新佈局。爲了使RecyclerViewChildActivity中可用,您還需要將其包含在activity_get_mobile_number.xml中。

請參閱this pageincludemerge標籤。

這個想法將是一個單獨的通用佈局文件,你將包括在BaseActivityChildActivity佈局。然後,將所有你的代碼的方法,並調用它的子類:

public class BaseActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_base); 
     setupRecyclerView(); 
    } 

    protected void setupRecyclerView(){ 
     RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); 

     baseRecyclerModel itemsData[] = { new baseRecyclerModel("Help",R.drawable.help), 
      new baseRecyclerModel("Delete",R.drawable.delete), 
      new baseRecyclerModel("Cloud",R.drawable.cloud)}; 

     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 

     baseRecyclerAdapter mAdapter = new baseRecyclerAdapter(itemsData); 

     recyclerView.setAdapter(mAdapter); 

     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
    } 
} 


public class ChildActivity1 extends BaseActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_get_mobile_number); 
     super.setupRecyclerView(), 
    } 

} 
相關問題