【发布时间】:2018-11-03 08:08:33
【问题描述】:
当用户单击菜单操作栏中的刷新图标时,我想刷新片段的内容。
我的应用程序在一个带有视图寻呼机的活动上具有三个片段;我尝试通过在onOptionsItemSelected() 中调用它们来刷新所有这些,并且我对它们执行了事务,当用户单击刷新菜单时应用程序崩溃。
我读过这个问题,它可能和我的相似,但我找不到合适的答案来解决我的问题:android: menu item click event from fragment我也读过这篇文章:但没有任何帮助:https://developer.android.com/guide/topics/ui/menus也许我没有以正确的方式进行。
我在活动中刷新所有三个片段的代码如下:
@Override
public boolean onOptionsItemSelected(MenuItem item){
Fragment sentMsg=getSupportFragmentManager().findFragmentByTag("fragmentSentMsg");
Fragment receivedMsg=getSupportFragmentManager().findFragmentByTag("fragmentReceivedMsg");
Fragment allMsg=getSupportFragmentManager().findFragmentByTag("fragmentAllMsg");
FragmentTransaction fragmentTransaction=getSupportFragmentManager().beginTransaction();
switch (item.getItemId()){
case R.id.refresher_id:
fragmentTransaction.detach(sentMsg).attach(sentMsg).commit();
fragmentTransaction.detach(receivedMsg).attach(receivedMsg).commit();
fragmentTransaction.detach(allMsg).attach(allMsg).commit();
break;
}
return super.onOptionsItemSelected(item);
}
这些是一个片段的代码:
public class Page2_sent_msg extends Fragment {
//default constructor
public Page2_sent_msg(){}
@SuppressLint("ResourceType")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){
final View Page2_sent_msg=inflater.inflate(R.layout.page2_sent_msg,container,false);
ListView sentMsgListView=(ListView)Page2_sent_msg.findViewById(R.id.sentMsgListview);
ArrayList<String> sentMsgArrayList=new ArrayList<String>();
SQLite_database_helper_class myDb=new SQLite_database_helper_class(getContext());
Cursor result=myDb.getting_sms_from_db();
if (result.moveToFirst()){
do {
if (!result.getString(3).equals("Sent message")){
continue;
}else{
sentMsgArrayList.add("SMS No : "+result.getString(0)+"\n"
+"Address : "+result.getString(1)+"\n"
+"Date : "+result.getString(2)+"\n"
+"Type : "+result.getString(3)+"\n"
+"Content : "+"\n________\n\n"+result.getString(4)+"\n");
}
}while (result.moveToNext());
}
ArrayAdapter<String>sentMsgAdapter=new ArrayAdapter<>(getContext(),android.R.layout.simple_list_item_1,sentMsgArrayList);
sentMsgListView.setAdapter(sentMsgAdapter);
sentMsgListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//this is what will happen when a user clicks one item from the lis view
}
});
Page2_sent_msg.setTag("sentMsg");
return Page2_sent_msg;
}
我确实需要帮助。亲切的问候!
【问题讨论】:
-
在此处添加崩溃日志
-
你能从片段中刷新吗?
-
@SuhaibRoomy 我也试过了,我叫它
onOptionsItemSelected(),但它根本不起作用:看看我是如何在同一个片段中做到的:@Override public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()) { case R.id.refresher_id: getFragmentManager().beginTransaction().detach(this).attach(this).commitNow(); } return super.onOptionsItemSelected(item); }这些代码是片段当前,但是当我单击刷新图标时,刷新不起作用 -
@SuhaibRoomy 崩溃日志?好吧,它说“您的应用程序停止工作”
-
我要从 logcat 获取日志
标签: android android-fragments fragment android-listfragment fragmenttransaction