Android-在选项卡活动中更新片段

Android-在选项卡活动中更新片段,android,android-fragments,android-listfragment,android-tabs,fragmenttransaction,Android,Android Fragments,Android Listfragment,Android Tabs,Fragmenttransaction,我正在构建一个带有tab活动的android应用程序。 选项卡将列出当用户触发长按事件时 在列表中确定的项目中,将显示上下文菜单 将被打开,用户将能够选择该选项 编辑该项目 为此,我创建了一个Activity,它扩展了FragmentActivity并实现了ActionBar.TabListener 我需要做的是,当用户选择编辑项目的选项时,表单会在该列表的选项卡(fragmentlist)内打开,更新当前选项卡的片段。 我尝试在列表活动片段中使用FragmentTransaction,但没有成

我正在构建一个带有tab活动的android应用程序。 选项卡将列出当用户触发长按事件时 在列表中确定的项目中,将显示上下文菜单 将被打开,用户将能够选择该选项 编辑该项目

为此,我创建了一个Activity,它扩展了FragmentActivity并实现了ActionBar.TabListener

我需要做的是,当用户选择编辑项目的选项时,表单会在该列表的选项卡(fragmentlist)内打开,更新当前选项卡的片段。 我尝试在列表活动片段中使用FragmentTransaction,但没有成功

我尝试的代码如下(在ListFragment处)

有人能帮我吗?谢谢

编辑: FragmentActivity的布局如下所示:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>
public class FiltroActivity extends FragmentActivity implements
        ActionBar.TabListener {
    private ViewPager viewPager;
    private TabsPagerAdapter mAdapter;
    private ActionBar actionBar;
    // Tab titles
    private String[] tabs = { "Filtro", "Diário", "Semanal" };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.filtro_activity);
        viewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getActionBar();
        mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(mAdapter);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        for (String tab_name : tabs) {
            actionBar.addTab(actionBar.newTab().setText(tab_name)
                    .setTabListener(this));
        }
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                actionBar.setSelectedNavigationItem(position);
            }
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }
            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        });
    }
    @Override
    public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {
    }
    @Override
    public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {
        // TODO Auto-generated method stub
    }
}
public class ListagemFragment extends ListFragment {
    public class MyListAdapter extends ArrayAdapter<Compromisso> {
        Context myContext;
        View v;
        public MyListAdapter(Context context, int textViewResourceId,
                List<Compromisso> objects) {
            super(context, textViewResourceId, objects);
            myContext = context;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // return super.getView(position, convertView, parent);

            v = convertView;
            LayoutInflater inflater = (LayoutInflater) myContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View row = inflater.inflate(R.layout.listagem_item_activity,
                    parent, false);
            TextView label = (TextView) row.findViewById(R.id.txtTitulo);
            TextView label2 = (TextView) row.findViewById(R.id.txtData);
            if (compromissos.size() > 0) {
                label.setText(compromissos.get(position).getTitulo());
                label2.setText("Data: "
                        + Formatter.GetShortDate(compromissos.get(position)
                                .getDataInicio(), "dd/MM/yyyy HH:mm"));
            }
            return row;
        }
    }
    List<Compromisso> compromissos;
    MyListAdapter myListAdapter;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.getListaCompromisso();
        myListAdapter = new MyListAdapter(getActivity(),
                R.layout.listagem_item_activity, compromissos);
        setListAdapter(myListAdapter);
    }

    private void getListaCompromisso() {
        compromissos = new ArrayList<Compromisso>();
        CompromissoNegocio negocio = new CompromissoNegocio();
        compromissos = negocio.getListaCompromisso(getActivity()
                .getApplicationContext());
    }
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        registerForContextMenu(getListView());
        super.onActivityCreated(savedInstanceState);
    }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = this.getActivity().getMenuInflater();
        inflater.inflate(R.menu.menu_listagem, menu);
    }
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
                .getMenuInfo();
        int position;
        Intent i;
        switch (item.getItemId()) {
        case R.id.delete_item:
            info = (AdapterContextMenuInfo) item.getMenuInfo();
            position = (int) info.position;
            CompromissoNegocio compNeg = new CompromissoNegocio();
            compNeg.Deletar(compromissos.get(position).getCompromissoID(),
                    getActivity());
            compromissos.remove(position);
            myListAdapter.notifyDataSetChanged();
            return true;
        case R.id.edit_item:
            info = (AdapterContextMenuInfo) item.getMenuInfo();
            position = (int) info.position;
            EditActivity newFragment = new EditActivity();
            FragmentTransaction transaction = getFragmentManager()
                    .beginTransaction();
            transaction.replace(((ViewGroup) getView().getParent()).getId(),
                    newFragment);
            transaction.addToBackStack(null);
            transaction
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); //
            // Commit the transaction
            transaction.commit();
            Log.i("haha", "haha");

            return true;
        default:
            return super.onContextItemSelected(item);
        }
    }

    public void onResume() {
        super.onResume();
        getListaCompromisso();
        myListAdapter.notifyDataSetChanged();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.listagem_activity, container, false);
    }
}
ListFragment的代码如下所示:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>
public class FiltroActivity extends FragmentActivity implements
        ActionBar.TabListener {
    private ViewPager viewPager;
    private TabsPagerAdapter mAdapter;
    private ActionBar actionBar;
    // Tab titles
    private String[] tabs = { "Filtro", "Diário", "Semanal" };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.filtro_activity);
        viewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getActionBar();
        mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(mAdapter);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        for (String tab_name : tabs) {
            actionBar.addTab(actionBar.newTab().setText(tab_name)
                    .setTabListener(this));
        }
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                actionBar.setSelectedNavigationItem(position);
            }
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }
            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        });
    }
    @Override
    public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {
    }
    @Override
    public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {
        // TODO Auto-generated method stub
    }
}
public class ListagemFragment extends ListFragment {
    public class MyListAdapter extends ArrayAdapter<Compromisso> {
        Context myContext;
        View v;
        public MyListAdapter(Context context, int textViewResourceId,
                List<Compromisso> objects) {
            super(context, textViewResourceId, objects);
            myContext = context;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // return super.getView(position, convertView, parent);

            v = convertView;
            LayoutInflater inflater = (LayoutInflater) myContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View row = inflater.inflate(R.layout.listagem_item_activity,
                    parent, false);
            TextView label = (TextView) row.findViewById(R.id.txtTitulo);
            TextView label2 = (TextView) row.findViewById(R.id.txtData);
            if (compromissos.size() > 0) {
                label.setText(compromissos.get(position).getTitulo());
                label2.setText("Data: "
                        + Formatter.GetShortDate(compromissos.get(position)
                                .getDataInicio(), "dd/MM/yyyy HH:mm"));
            }
            return row;
        }
    }
    List<Compromisso> compromissos;
    MyListAdapter myListAdapter;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.getListaCompromisso();
        myListAdapter = new MyListAdapter(getActivity(),
                R.layout.listagem_item_activity, compromissos);
        setListAdapter(myListAdapter);
    }

    private void getListaCompromisso() {
        compromissos = new ArrayList<Compromisso>();
        CompromissoNegocio negocio = new CompromissoNegocio();
        compromissos = negocio.getListaCompromisso(getActivity()
                .getApplicationContext());
    }
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        registerForContextMenu(getListView());
        super.onActivityCreated(savedInstanceState);
    }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = this.getActivity().getMenuInflater();
        inflater.inflate(R.menu.menu_listagem, menu);
    }
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
                .getMenuInfo();
        int position;
        Intent i;
        switch (item.getItemId()) {
        case R.id.delete_item:
            info = (AdapterContextMenuInfo) item.getMenuInfo();
            position = (int) info.position;
            CompromissoNegocio compNeg = new CompromissoNegocio();
            compNeg.Deletar(compromissos.get(position).getCompromissoID(),
                    getActivity());
            compromissos.remove(position);
            myListAdapter.notifyDataSetChanged();
            return true;
        case R.id.edit_item:
            info = (AdapterContextMenuInfo) item.getMenuInfo();
            position = (int) info.position;
            EditActivity newFragment = new EditActivity();
            FragmentTransaction transaction = getFragmentManager()
                    .beginTransaction();
            transaction.replace(((ViewGroup) getView().getParent()).getId(),
                    newFragment);
            transaction.addToBackStack(null);
            transaction
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); //
            // Commit the transaction
            transaction.commit();
            Log.i("haha", "haha");

            return true;
        default:
            return super.onContextItemSelected(item);
        }
    }

    public void onResume() {
        super.onResume();
        getListaCompromisso();
        myListAdapter.notifyDataSetChanged();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.listagem_activity, container, false);
    }
}
公共类ListAgerFragment扩展了ListFragment{
公共类MyListAdapter扩展了ArrayAdapter{
语境;
观点五;
公共MyListAdapter(上下文,int textViewResourceId,
列出对象){
超级(上下文、textViewResourceId、对象);
myContext=上下文;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//返回super.getView(position、convertView、parent);
v=转换视图;
LayoutFlater充气器=(LayoutFlater)myContext
.getSystemService(上下文布局\充气机\服务);
查看行=充气机。充气(R.layout.listagem项目活动,
父母,假);
TextView标签=(TextView)row.findViewById(R.id.txtitulo);
TextView label2=(TextView)row.findViewById(R.id.txtData);
如果(sos.size()>0){
label.setText(commissos.get(position.getitulo());
label2.setText(“数据:
+格式化程序.GetShortDate(sos.get)(位置)
.getDataInicio(),“dd/MM/yyyy HH:MM”);
}
返回行;
}
}
SOS清单;
MyListAdapter MyListAdapter;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.getListaCompromisso();
myListAdapter=新的myListAdapter(getActivity(),
R.layout.listmagage项目活动(SOS);
setListAdapter(myListAdapter);
}
私有无效getListaCompromisso(){
折衷SOS=新的ArrayList();
折衷方案negocio negocio=新折衷方案negocio();
折衷SOS=negocio.getListaCompromisso(getActivity()
.getApplicationContext());
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
registerForContextMenu(getListView());
super.onActivityCreated(savedInstanceState);
}
@凌驾
public void onCreateContextMenu(ContextMenu,视图v,
ContextMenu.ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu,v,menuInfo);
MenuInflater充气器=此.getActivity().getMenuInflater();
充气机。充气(右菜单。菜单列表,菜单);
}
@凌驾
公共布尔值onContextItemSelected(MenuItem项){
AdapterView.AdapterContextMenuInfo信息=(AdapterView.AdapterContextMenuInfo)项
.getMenuInfo();
内部位置;
意图一;
开关(item.getItemId()){
案例R.id.delete_项目:
info=(AdapterContextMenuInfo)项。getMenuInfo();
位置=(int)info.position;
ConvertizanSonegocio compNeg=新的ConvertizanSonegocio();
compNeg.Deletar(convertisos.get(position).getconvertisoid(),
getActivity());
拆卸(位置);
myListAdapter.notifyDataSetChanged();
返回true;
案例R.id.edit_项目:
info=(AdapterContextMenuInfo)项。getMenuInfo();
位置=(int)info.position;
EditActivity newFragment=新的EditActivity();
FragmentTransaction事务=getFragmentManager()
.beginTransaction();
事务.replace(((视图组)getView().getParent()).getId(),
新片段);
transaction.addToBackStack(空);
交易
.setTransition(片段事务处理.transition\u片段\u褪色)//
//提交事务
commit();
Log.i(“哈哈”,“哈哈”);
返回true;
违约:
返回super.onContextItemSelected(项目);
}
}
恢复时公开作废(){
super.onResume();
getListaCompromisso();
myListAdapter.notifyDataSetChanged();
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
返回充气机。充气(R.layout.listagem_活动,容器,错误);
}
}

您能再解释一下吗?列表在哪里?您需要在哪里显示表格?选项卡包含什么?我编辑了问题并添加了相关代码。您必须将该项目设置为viewPager,例如:viewPager.setCurrentItem(tab.getPosition())在OnAbsSelected()中。试试这个,让我知道。我试过了,但没有任何改变:(只是把你发布的代码放进去了吗?你有没有收到任何错误?或者这样行吗?