【发布时间】:2021-06-21 05:50:48
【问题描述】:
所以我有一个应用程序如下: 用户输入其凭据的登录页面,如果他的凭据正确,则可以访问主应用程序。如果他选中记住我复选框,他的用户名和密码将保存在共享首选项中,以便他可以在第二次直接进入主应用程序。
主应用程序有一个带有 viewpager 的选项卡式布局。在其中一个选项卡中,它是一个片段,我使用 recyclerview 以行显示从数据库中获取的数据。 现在在每一行中都有一个回复按钮,单击该按钮将显示与每一行对应的详细信息。详细信息将显示在新片段中。
所以关键是我设法在 recyclerview 的适配器中使用此代码将选项卡的片段替换为新片段:
public class recyclerviewAdapter : RecyclerView.Adapter
{
// Event handler for item clicks:
public event EventHandler<int> ItemClick;
List <summary_request> summary_Requests=new List<summary_request>();
//Context context;
public readonly stores_fragment context;
public recyclerviewAdapter(stores_fragment context, List<summary_request> sum_req)
{
this.context = context;
summary_Requests = sum_req;
}
public override RecyclerView.ViewHolder
OnCreateViewHolder(ViewGroup parent, int viewType)
{
View itemView = LayoutInflater.From(parent.Context).
Inflate(Resource.Layout.recycler_view_data, parent, false);
recyclerview_viewholder vh = new recyclerview_viewholder(itemView, OnClick);
return vh;
}
public override void
OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
recyclerview_viewholder vh = holder as recyclerview_viewholder;
vh.by_user.Text = summary_Requests[position].By;
vh.warehousename.Text = summary_Requests[position].warehousename;
vh.project.Text = summary_Requests[position].project;
vh.operations_note.Text = summary_Requests[position].destination_Note;
vh.source_Note.Text = summary_Requests[position].source_Note;
vh.stockType.Text = summary_Requests[position].stockType;
vh.requestStatus.Text = summary_Requests[position].requestStatus;
vh.reply.Click += delegate
{
summary_detail_req fragment = new summary_detail_req();
var fm = context.FragmentManager.BeginTransaction();
fm.Replace(Resource.Id.frameLayout1, fragment);
fm.AddToBackStack(null);
fm.Commit();
int nb = context.FragmentManager.BackStackEntryCount;
Toast.MakeText(context.Context, nb.ToString(), ToastLength.Long).Show();
};
}
private void Reply_Click(object sender, EventArgs e)
{
Toast.MakeText(context.Context, "reply" , ToastLength.Long).Show();
}
public override int ItemCount
{
get { return summary_Requests.Count; }
}
// Raise an event when the item-click takes place:
void OnClick(int position)
{
if (ItemClick != null)
ItemClick(this, position);
}
}
但我的context.FragmentManager.BackStackEntryCount 仍然为零!我不明白。在我的主要活动中,我将此代码用于 backpress 功能:
stores_fragment.recyclerviewAdapter adapter;
public override void OnBackPressed()
{
string userName = pref.GetString("Username", String.Empty);
string password = pref.GetString("Password", String.Empty);
if (userName != String.Empty || password != String.Empty && adapter.context.FragmentManager.BackStackEntryCount == 0)
{
this.FinishAffinity();
}
else
base.OnBackPressed();
}
但我没有得到我想要的。这个功能让我脱离了整个应用程序。if 语句的第一部分是因为没有它,当我从主要活动中按下后退按钮时,它会将我带回登录页面,我不希望那样。 我的问题是我应该怎么做来管理我的片段和 backpress 功能? 提前致谢。
【问题讨论】:
标签: android-fragments android-recyclerview xamarin.android onbackpressed