我正试着从后面取回碎片。它正在被检索,但问题是在按下后退按钮时,当前片段的oncreate视图和后续lifecyce方法也会被调用。下面是我将片段放入backbackback的代码:
fragment=new FileTrackingFragment();
bundle=new Bundle();
bundle.putString("name","Dak Monitoring");
bundle.putInt("num",2);
fragment.setArguments(bundle);
ft.replace(R.id.parent, fragment, fragment.getClass().getName());
ft.addToBackStack(fragment.getClass().getName());
ft.commit();
break;
以下是片段的代码:
package com.example.rajvirsingh.epunjaboffice.DakMonitoring;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.percent.PercentRelativeLayout;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.example.rajvirsingh.epunjaboffice.FileTracking.HistoryAdapter;
import com.example.rajvirsingh.epunjaboffice.MainActivity;
import com.example.rajvirsingh.epunjaboffice.R;
import com.example.rajvirsingh.epunjaboffice.Utility.Constants;
import com.example.rajvirsingh.epunjaboffice.Utility.SessionManager;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.RequestParams;
import com.loopj.android.http.TextHttpResponseHandler;
import org.json.JSONArray;
import java.util.ArrayList;
import cz.msebera.android.httpclient.Header;
/**
* Created by rajvirsingh on 07/03/17.
*/
public class ConsolidatedReportFragment extends Fragment implements AdapterView.OnItemSelectedListener {
SessionManager sessionManager;
JSONArray consolidatedRJsonArray;
String userCode,branchCode;
MainActivity mainActivity;
Spinner spinDuration;
String selectedDuration="";
ProgressDialog pDialog;
TextView error,serial;
PercentRelativeLayout pl;
PercentRelativeLayout ll;
RecyclerView recyclerView;
AsyncHttpClient client = new AsyncHttpClient();
String []durationValues={"This Week","This Month","This Year","Total"};
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_dak_monitoring_consolidated,container,false);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
sessionManager=SessionManager.NewInstance(activity);
userCode=sessionManager.pref.getString("usercode","");
branchCode=sessionManager.pref.getString("branchcode","");
mainActivity=(MainActivity) getActivity();
if(((AppCompatActivity) getActivity()).getSupportActionBar()!=null) {
((AppCompatActivity) getActivity()).getSupportActionBar().show();
mainActivity.setToolbarTitle("Consolidated Report");
mainActivity.unlockDrawer();
mainActivity.loadNavigationMenu(R.menu.menu_dak_monitoring);
}
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
pDialog = new ProgressDialog(getActivity(),R.style.DialogStyle);
pDialog.setMessage("Loading...");
pDialog.setTitle("Office Management");
pDialog.setIndeterminate(true);
pDialog.setCancelable(true);
sessionManager=SessionManager.NewInstance(getActivity());
error=(TextView)view.findViewById(R.id.err);
serial=(TextView)view.findViewById(R.id.serial);
spinDuration=(Spinner)view.findViewById(R.id.spin_duration);
ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(getActivity(),android.R.layout.simple_spinner_item,durationValues);
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinDuration.setAdapter(arrayAdapter);
spinDuration.setOnItemSelectedListener(this);
spinDuration.setSelection(0);
selectedDuration="1";
pl=(PercentRelativeLayout)view.findViewById(R.id.percentile);
ll=(PercentRelativeLayout) view.findViewById(R.id.ll1);
recyclerView=(RecyclerView)view.findViewById(R.id.recyclerView);
if(Constants.isOnline(getActivity()))
{
getConsolidatedReport();
}
}
void getConsolidatedReport()
{
RequestParams params = new RequestParams();
params.put("_userMasterCode",userCode);
params.put("_parameter", selectedDuration);
String url=getString(R.string.urlGetConsolidatedMonitoringReport);
client.get(url, params, new TextHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
pDialog.dismiss();
ll.setVisibility(View.GONE);
recyclerView.setVisibility(View.GONE);
error.setVisibility(View.VISIBLE);
if(getView()!=null)
Snackbar.make(getView(), "Error!", Snackbar.LENGTH_LONG).show();
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
try {
pDialog.dismiss();
int p1 = responseString.indexOf(">");
int p2 = responseString.lastIndexOf("<");
String r = responseString.substring(p1 + 1, p2);
p1 = r.indexOf(">");
r = r.substring(p1 + 1, r.length());
ll.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.VISIBLE);
error.setVisibility(View.GONE);
consolidatedRJsonArray = new JSONArray(r);
ConsolidatedReportAdapter consolidatedReportAdapter=new ConsolidatedReportAdapter(consolidatedRJsonArray,getActivity());
recyclerView.setAdapter(consolidatedReportAdapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
} catch (Exception e) {
if (getActivity() != null && isAdded()) {
ll.setVisibility(View.GONE);
recyclerView.setVisibility(View.GONE);
error.setVisibility(View.VISIBLE);
if(getView()!=null)
Snackbar.make(getView(), "No Information Exist! For Selection", Snackbar.LENGTH_LONG).show();
else
Toast.makeText(getActivity(),"No Information Exist! For Selection",Toast.LENGTH_LONG).show();
pDialog.dismiss();
}
}
}
});
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (parent.getId())
{
case R.id.spin_duration:
selectedDuration=String.valueOf(position+1);
getConsolidatedReport();
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
@Override
public void onPause() {
super.onPause();
pDialog.dismiss();
}
@Override
public void onStop() {
client.cancelAllRequests(true);
super.onStop();
}
}
当你移动到下一个片段时,它会调用你的视图被破坏,所以它会要求在按下后退按钮时再次查看,这应该是保持片段视图(目前不可见)在内存中会导致内存问题的方法上。它是一个不会被再次调用的方法。
如果您不想在返回时调用onCreateView,请使用ft.add(R.id.parent,fragment,fragment.getClass()。getName())
有关片段堆栈行为的更多详细信息,请参阅此处。
在活动A中,我可以查看。我在活动A中按下了一个编辑按钮,它启动活动B(并关闭A)。在代码中,我将带有意图的字符串从A传递到B,如下所示: 在活动A中,我有: 但是文本框是空的。 你能告诉我该如何把值从B传递回A吗?
问题内容: 我想在片段类中禁用后退按钮。在此片段中似乎不起作用。如何禁用后退按钮? 这是我的示例代码: 问题答案: 您必须重写父FragmentActivity类的onBackPressed。因此,将您的代码放在父FragmentActivity中。或者,您可以使用以下方法调用父方法: 在FragmentActivity中重写onBackPressed方法,而不调用其超类来禁用后退按钮。
在写这个之前,我已经经历了很多stackoverflow问题。我对这个家伙的碎片背栈很困惑。 我在一个活动中的同一个容器上添加了三个片段 现在我想要的是,当用户按下片段3上的后退按钮时,它应该出现在第一个片段上,所以我已经覆盖了onBackPressed()方法。 但屏幕上什么也没发生,它让片段3继续运行。 更新 任何实现这一点的解决方案。
我对libGDX有一个问题,当我用后退按钮退出后恢复应用程序时,只有一个白色屏幕。 实际应用运行,接受触摸输入,播放声音,但屏幕只是白色。 我读过保持对纹理的静态引用可能会导致这个问题,但我没有这样做。 下面是我的资产代码如何工作的简化版本。 在按下后退按钮后返回应用程序时,重新创建AssetManager,重新打开SplashScreen(为白色),并更新AssetManager直到重新加载所有
我正在编写一个android应用程序,使用框架布局和片段作为其组件。 我有3个片段:、、。 在社区片段中,用户按下一个按钮来创建一个任务。然后TaskFromFrament用替换FrameLayout中的社区片段。因为在那之后,我想用后退按钮返回社区片段。 在TaskFormFragment中,用户按create按钮创建任务。然后TaskFragment打开,没有添加堆栈,因为我不想在按下后退按钮
我正在使用android导航组件库。我用导航图设置了两个片段。我想在我的片段内按下后退按钮时做一些额外的动作。 我使用这段代码来处理工具栏上的按钮点击,但我也想处理后退按钮按下。我该怎么做?