【问题标题】:Cardviews not showing after back pressed按下后不显示卡片视图
【发布时间】:2017-02-16 09:10:48
【问题描述】:

我已在导航抽屉中成功实现cardview and recycleview。现在的问题是,当我点击我的第一个卡片视图时,它会将我带到我的第一个片段,然后按返回,我的卡片视图不再在我的列表选项卡(第一个片段)中。查看卡片视图列表的唯一选项是再次滑动到我的导航抽屉并单击第一个片段以查看卡片视图。

这是我的代码 RecyclerViewAdapter.class

package com.example.guitarista.citem.Exhibitor;

import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.CardView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.guitarista.citem.Gallery_SpringForward.GalleryFragment;
import com.example.guitarista.citem.Gallery_activity.GalleryActivity;
import com.example.guitarista.citem.R;
import java.util.List;



/**
 * Created by smdojt on 1/24/2017.
 */

public class TabInt_RV_Adapter extends RecyclerView.Adapter<TabInt_RV_Adapter.ItemViewHolder> {

    public static class ItemViewHolder extends RecyclerView.ViewHolder {
        static CardView cv;
        TextView itemName;
        TextView itemCathegory;
        ImageView itemPhoto;

        ItemViewHolder(View itemView) {
            super(itemView);
            cv = (CardView)itemView.findViewById(R.id.cv);
            itemName = (TextView) itemView.findViewById(R.id.item_name);
            itemCathegory = (TextView) itemView.findViewById(R.id.item_cathegory);
            itemPhoto = (ImageView) itemView.findViewById(R.id.item_photo);
        }
    }

    List<Exhibitors_Int> items;
    Context context;
    TabInt_RV_Adapter(List<Exhibitors_Int> items, Context context) {
        this.context = context;
        this.items = items;
    }


    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    @Override
    public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.fragment_exhibitor_tabint_item, viewGroup, false);
        ItemViewHolder ivh = new ItemViewHolder(v);
        return ivh;
    }

    @Override
    public void onBindViewHolder(ItemViewHolder itemViewHolder, final int i) {
        itemViewHolder.cv.setOnClickListener(null);
        itemViewHolder.itemName.setText(items.get(i).name);
        itemViewHolder.itemCathegory.setText(items.get(i).cathegory);
        itemViewHolder.itemPhoto.setImageResource(items.get(i).photoId);

        ItemViewHolder.cv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (i == 1) {
                    //Toast.makeText(context, "Index position is 1", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent (context, GalleryActivity.class);
                    context.startActivity(intent);
                }
                else if (i == 2) {
                    //Toast.makeText(context, "Index position is 2 ", Toast.LENGTH_SHORT).show();
                    AppCompatActivity activity = (AppCompatActivity) v.getContext();
                    GalleryFragment gf = new GalleryFragment();
                    activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, gf).addToBackStack(null).commit();
                }

            }
        });
    }

    @Override
    public int getItemCount() {
        return items.size();
    }


}

请注意,在我的 onClick 上,有两个版本的图库。第一个是原始activity,第二个是为fragment实现的。

所以当我点击第一个,然后再按,cardviews 将显示。现在这有什么问题?单击图库的活动版本时,我无法在导航抽屉中滑动。

在哪里,当我点击第二个实现片段的卡片视图时,导航抽屉滑动在画廊内确实有效,但是当我按下返回时,卡片视图列表不会显示。

即使我将这些代码行用于片段:

GalleryFragment fr = new GalleryFragment();
                     Bundle args = new Bundle();
                     fr.setArguments(args);
                     FragmentManager fm = getFragmentManager();
                     FragmentTransaction fragmentTransaction = fm.beginTransaction();
                     fragmentTransaction.replace(R.id.fragment_container, fr);
                     fragmentTransaction.addToBackStack(null);
                     fragmentTransaction.commit();

我什至会收到 getFragmentManager();

的错误

有没有其他方法可以解决这个问题?

卡片浏览代码

package com.example.guitarista.citem.Exhibitor;

import android.os.Bundle;
import android.support.v4.app.Fragment;
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 com.example.guitarista.citem.R;

import java.util.ArrayList;
import java.util.List;

/**
 * A simple {@link Fragment} subclass.
 */
public class TabInternationalFragment extends Fragment {

    private List<Exhibitors_Int> items;
    private RecyclerView rv;

    public TabInternationalFragment() {
        // Required empty public constructor
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_exhibitor_tab_international, container, false);

        rv=(RecyclerView)v.findViewById(R.id.rv);
        LinearLayoutManager llm = new LinearLayoutManager(getActivity());
        rv.setLayoutManager(llm);
        //GridLayoutManager glm = new GridLayoutManager(getActivity(), 4);
        //rv.setLayoutManager(glm);
        rv.setHasFixedSize(true);

        initializeData();
        initializeAdapter();
        return v;
    }

    private void initializeData() {
        items = new ArrayList<>();
        items.add(new Exhibitors_Int("A. GARCIA CRAFTS", "FURNITURE", R.drawable.image1));
        items.add(new Exhibitors_Int("BALEX BOXES", "HOLIDAY DECORATION", R.drawable.image2));
        items.add(new Exhibitors_Int("CAGAYAN DE ORO HANDMADE PAPER", "HOME DECOR/HOUSEWARE", R.drawable.image3));
    }

    private void initializeAdapter(){
        TabInt_RV_Adapter adapter = new TabInt_RV_Adapter(items, getContext());
        rv.setAdapter(adapter);

    }

}

【问题讨论】:

  • 在此处发布您的片段代码
  • 画廊片段还是用于构建这些的主要片段?
  • 是的,您在其中显示卡片视图的片段
  • @Pehlaj 添加了卡片视图的片段代码。它与我发布的教程完全相同。
  • 尝试调用initializeData();初始化适配器();在片段的onResume方法中

标签: android android-fragments android-recyclerview fragment android-cardview


【解决方案1】:

如果您想在按下返回按钮后保持第一个 Activity 的状态,您应该在 AndroidManifest.xml 中定义您的第一个 Activity 的启动模式。还要为您的第二个 Activity 定义父 Activity,以便当您按下返回按钮时,Android 知道它应该导航回哪个 Activity。

    <activity
        android:name=".activity.HomeActivity"
        android:label="@string/app_name"
        android:launchMode="singleTop" />
    <activity
        android:name=".activity.GalleryActivity"
        android:label="@string/app_name"
        android:parentActivityName=".activity.HomeActivity"
        tools:ignore="UnusedAttribute">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".activity.HomeActivity" />
    </activity>

singleTop 启动模式将确保如果活动堆栈中已经有一个实例,则不会创建该活动的新实例。因此,按下后退按钮后,您的卡片仍会在您的第一个活动中显示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 2019-10-04
    • 2016-08-08
    • 2018-04-13
    • 2018-02-04
    相关资源
    最近更新 更多