Android-在选项卡活动中更新片段
我正在构建一个带有tab活动的android应用程序。 选项卡将列出当用户触发长按事件时 在列表中确定的项目中,将显示上下文菜单 将被打开,用户将能够选择该选项 编辑该项目 为此,我创建了一个Activity,它扩展了FragmentActivity并实现了ActionBar.TabListener 我需要做的是,当用户选择编辑项目的选项时,表单会在该列表的选项卡(fragmentlist)内打开,更新当前选项卡的片段。 我尝试在列表活动片段中使用FragmentTransaction,但没有成功 我尝试的代码如下(在ListFragment处) 有人能帮我吗?谢谢 编辑: FragmentActivity的布局如下所示: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,但没有成
<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()中。试试这个,让我知道。我试过了,但没有任何改变:(只是把你发布的代码放进去了吗?你有没有收到任何错误?或者这样行吗?