[英]Can't see my fragment using ActionBarSherlock
我正在嘗試使用ActionBarSherlock顯示不同的列表片段,具體取決於當前正在查看的選項卡。 到目前為止,盡管我什至無法擺脫嘗試顯示我的片段。 我可以看到它正在被實例化和創建,但是它根本沒有在視圖中顯示。
這是實現SherlockFragmentActivity的活動:
public class MyListView extends SherlockFragmentActivity implements ActionBar.TabListener{
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(com.actionbarsherlock.R.style.Theme_Sherlock); //Used for theme switching in samples
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_navigation);
MyListFrag listFrag = (MyListFrag) getSupportFragmentManager()
.findFragmentById(R.id.fragment1);
listFrag.update(ViewActivity.livePoints);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment1, listFrag);
fragmentTransaction.commit();
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
for (int i = 1; i <= 3; i++) {
ActionBar.Tab tab = getSupportActionBar().newTab();
tab.setText("Tab " + i);
tab.setTabListener(this);
getSupportActionBar().addTab(tab);
}
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction transaction) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction transaction) {
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction transaction) {
}
}
您可以看到我已經嘗試通過使用fragmentmanager將片段添加到活動中,但是我還嘗試通過xml添加片段,目前這對我也不起作用。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="20dip">
<fragment
android:name="core.MyListFrag"
android:id="@+id/fragment1"
android:layout_weight="1"
android:layout_width="0px"
android:layout_height="match_parent"
/>
</LinearLayout>
最后,這是我正在使用的listfragment類。 我想做的是使用通過擴展baseadapter創建的自定義適配器填充列表,但是我不確定是否正確地執行了操作,這可能是問題的一部分。
public class MyListFrag extends SherlockListFragment{
MarkItemAdapter mia;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mia = new MarkItemAdapter(this.getActivity(), MyViewActivity.livePoints);
setListAdapter(mia);
Toast.makeText(getSherlockActivity(), "frag started"+MyViewActivity.livePoints.size(), Toast.LENGTH_LONG).show();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.list_frag_layout, container, false);
}
public void updateUrl(List<Points> newList) {
if(mia!=null){
mia.points.clear();
mia.points = newList;
mia.notifyDataSetChanged();
}else{
mia.points = newList;
mia.notifyDataSetChanged();
}
}
class MarkItemAdapter extends BaseAdapter{
List<Points> points = null;
Context cntx = null;
LayoutInflater myInflater;
int itemPosition =0;
ViewHolder holder;
public MarkItemAdapter(Context cntx,List<Points> points){
this.points = points;
this.cntx = cntx;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return marks.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
itemPosition = position;
if (convertView==null) {
convertView = myInflater.inflate(R.layout.point_row_item, null);
holder = new ViewHolder();
holder.description = (TextView) convertView.findViewById(R.id.point_description);
holder.distance = (TextView) convertView.findViewById(R.id.point_distance);
holder.point_image = (ImageView) convertView.findViewById(R.id.point_image);
holder.view_point = (ImageButton) convertView.findViewById(R.id.view_mark);
holder.rate_point = (RatingBar) convertView.findViewById(R.id.rate_point);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.description.setText(points.get(itemPosition).title);
holder.distance.setText(points.get(itemPosition).getDistanceString());
holder.view_point.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
//do stuff
}
});
//add logic for rating bar
return convertView;
}
}
private class MyViewHolder{
ImageView mark_image;
TextView description;
TextView distance;
ImageButton view_mark;
RatingBar rate_mark;
}
}
如果可以幫助任何人幫助我,我可以添加其他XML布局,但是我將它們遺漏了,因為我很確定是問題是我的Java而不是布局。 碎片在您第一次使用時絕對不是很簡單。 我不確定是否必須使用onAttach()
或其他東西,並且查看Android文檔並看到所有其他教程使我目前完全困惑。 在不知不覺中就開始玩弄片段,所以我不想為了使《科學怪人》片段變得混亂而把十個教程混在一起。
我假設您發布的xml文件是R.layout.tab_navigation ,看來還可以
如果您沒有“找不到類...”或“布局誇大錯誤...”之類的錯誤,那就很好
使用片段的想法是具有一個活動(SherlockFragmentActivity),它是一個容器 ,而子對象(片段)則可以在旋轉屏幕或使用平板電腦時添加/替換 ,以具有靈活的界面。
這種方式也可以用於擁有主/詳細信息流,例如albumList-> imageList-> slideShow
因此,您的MyListView充當了容器的角色,並膨脹了您發布R.layout.tab_navigation的xml。 並且將替換balise 片段的類MyListFrag本身會膨脹R.layout.list_frag_layout
現在,當使用片段時,您應該考慮使用replace而不是add
一個問題,在這種情況下,您想對片段使用什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.