簡體   English   中英

ListFragment和Fragment

[英]ListFragment and Fragment

我的應用程序中有三個標簽。 第一個和第三個只是片段,第二個是列表片段。 但是在主類中引用listfragment時出現以下錯誤。

錯誤:類型不匹配:無法從ItemFragment轉換為Fragment

代碼:mainactivity.java

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.ListFragment;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends FragmentActivity implements TabListener {

ViewPager viewpager;
ActionBar actionbar;
@Override
protected void onCreate(Bundle arg0) {
    super.onCreate(arg0);
    setContentView(R.layout.activity_main);

    actionbar=getActionBar();
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    viewpager=(ViewPager) findViewById(R.id.pager);
    viewpager.setAdapter(new MyAdapter(getSupportFragmentManager()));
    viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0) {
            actionbar.setSelectedNavigationItem(arg0);

        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub

        }
    });
    ActionBar.Tab tab1=actionbar.newTab();
    tab1.setText("Home");
    tab1.setTabListener(this);

    ActionBar.Tab tab2=actionbar.newTab();
    tab2.setText("Tracker");
    tab2.setTabListener(this);

    ActionBar.Tab tab3=actionbar.newTab();
    tab3.setText("Progress");
    tab3.setTabListener(this);

    actionbar.addTab(tab1);
    actionbar.addTab(tab2);
    actionbar.addTab(tab3);
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {

    viewpager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {


}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {


}

}

class MyAdapter extends FragmentPagerAdapter{



public MyAdapter(FragmentManager fm) {
    super(fm);
    // TODO Auto-generated constructor stub
}

@Override
public Fragment getItem(int arg0) {
    Fragment fragment=null;
    if(arg0==0){
        fragment=new Fragment_Home();
    }
    if(arg0==1){
        fragment=new ItemFragment();
    }
    if(arg0==2){
        fragment=new Fragment_Progress();
    }
    return fragment;

}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return 3;
}

}

程式碼:TestFragment.java

/**
 * A fragment representing a list of Items.
 * <p />
 * <p />
 * Activities containing this fragment MUST implement the {@link Callbacks}
 * interface.
 */
public class TestFragment extends ListFragment {

// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";

// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;

private OnFragmentInteractionListener mListener;

// TODO: Rename and change types of parameters
public static TestFragment newInstance(String param1, String param2) {
    TestFragment fragment = new TestFragment();
    Bundle args = new Bundle();
    args.putString(ARG_PARAM1, param1);
    args.putString(ARG_PARAM2, param2);
    fragment.setArguments(args);
    return fragment;
}

/**
 * Mandatory empty constructor for the fragment manager to instantiate the
 * fragment (e.g. upon screen orientation changes).
 */
public TestFragment() {
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }

    // TODO: Change Adapter to display your content
    setListAdapter(new ArrayAdapter<DummyContent.DummyItem>(getActivity(),
            android.R.layout.simple_list_item_1, android.R.id.text1,
            DummyContent.ITEMS));
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
        mListener = (OnFragmentInteractionListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    if (null != mListener) {
        // Notify the active callbacks interface (the activity, if the
        // fragment is attached to one) that an item has been selected.
        mListener
                .onFragmentInteraction(DummyContent.ITEMS.get(position).id);
    }
}

/**
 * This interface must be implemented by activities that contain this
 * fragment to allow an interaction in this fragment to be communicated to
 * the activity and potentially other fragments contained in that activity.
 * <p>
 * See the Android Training lesson <a href=
 * "http://developer.android.com/training/basics/fragments/communicating.html"
 * >Communicating with Other Fragments</a> for more information.
 */
public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name
    public void onFragmentInteraction(String id);
}

}

編輯:把它作為實例...。得到相同的錯誤。

if(arg0==1){
        String param1;
        String param2;
        fragment=ItemFragment.newInstance(param1, param2);
    }

ItemFragment必須是Fragment的實例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM