【问题标题】:Firebase ui 3.1.0 (Firebaselistadapter) No setter/field for mc_name found on classFirebase ui 3.1.0 (Firebaselistadapter) 在类上找不到 mc_name 的设置器/字段
【发布时间】:2017-12-13 02:58:36
【问题描述】:

我已经在正常活动中尝试了我的代码,包括图像和文本显示。 仅在片段中显示图像但未显示文本(在正常和片段活动中,我使用了相同的 xml 布局)。我正在为 gridview 使用 firebaselistadpter,它工作正常。我还尝试在片段静止图像中将它与列表视图一起使用,仅显示但没有显示文本。(没有错误消息)。

1- 我的 java 活动:

public class R_MainCat extends Fragment {

    private GridView gridView;
    private DatabaseReference myRef;
    private FirebaseListAdapter<Sub_Category_Data> adapter;
    private TextView mc_name;
    private ImageView url;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.activity_gridview, container, false);

        rootView.setBackgroundColor(Color.WHITE);

        myRef= FirebaseDatabase.getInstance().getReference("Main_Category");
        Firebase.getDefaultConfig().setPersistenceEnabled(true);
        gridView = (GridView) rootView.findViewById(R.id.gridview);


     FirebaseListOptions<Sub_Category_Data> options = new FirebaseListOptions.Builder<Sub_Category_Data>()
                .setQuery(myRef, Sub_Category_Data.class).setLayout(R.layout.gridview_icon).build();

        adapter = new FirebaseListAdapter<Sub_Category_Data>(options) {

            @Override
            protected void populateView(View v, Sub_Category_Data model, int position) {
                mc_name = v.findViewById(R.id.cat_name);
                url = v.findViewById(R.id.img);
                mc_name.setText(model.getName());
                Picasso.with(getActivity()).load(model.getUrl()).into(url);
            }
        };
        gridView.setAdapter(adapter);


        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int i, long id) {
                switch(i)
                {
                    case 0:
                        R_DairyProds f1 = new R_DairyProds();
                        FragmentTransaction fragTransaction1 = getFragmentManager().beginTransaction();
                        fragTransaction1.replace(R.id.container_view,f1 );
                        fragTransaction1.addToBackStack(null);
                        fragTransaction1.commit();
                        break;
                    case 1:
                        R_Bakery f2 = new R_Bakery();
                        FragmentTransaction fragTransaction2 = getFragmentManager().beginTransaction();
                        fragTransaction2.replace(R.id.container_view,f2 );
                        fragTransaction2.addToBackStack(null);
                        fragTransaction2.commit();
                        break;
                    case 2:
                        R_Grocery f3 = new R_Grocery();
                        FragmentTransaction fT3 = getFragmentManager().beginTransaction();
                        fT3.replace(R.id.container_view,f3);
                        fT3.addToBackStack(null);
                        fT3.commit();
                        break;
                    case 3:
                        R_FruitsNVegs f4 = new R_FruitsNVegs();
                        FragmentTransaction fT4 = getFragmentManager().beginTransaction();
                        fT4.replace(R.id.container_view,f4);
                        fT4.addToBackStack(null);
                        fT4.commit();
                        break;
                    case 4:
                        R_CleanNWash f5 = new R_CleanNWash();
                        FragmentTransaction fT5 = getFragmentManager().beginTransaction();
                        fT5.replace(R.id.container_view,f5);
                        fT5.addToBackStack(null);
                        fT5.commit();
                        break;
                }
            }
        });
        return rootView;

    }
    @Override
    public void onStart() {
        super.onStart();
        adapter.startListening();
    }

    @Override
    public void onStop() {
        super.onStop();
        adapter.stopListening();
    }
}

2-我的xml布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/card_view"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        card_view:cardUseCompatPadding="true"
        card_view:cardCornerRadius="4dp">
        <RelativeLayout
            android:descendantFocusability="blocksDescendants"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <ImageView
                android:id="@+id/img"
                android:layout_width="200dp"
                android:layout_height="200dp"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"/>
            <me.grantland.widget.AutofitLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@+id/img"
                >
            <TextView
                android:id="@+id/cat_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="hello_world"
                android:textColor="#000"
                android:textSize="20sp"
                android:gravity="center"
                />
            </me.grantland.widget.AutofitLayout>
        </RelativeLayout>
    </android.support.v7.widget.CardView>
</LinearLayout>

3-我的数据模型java:

public class Sub_Category_Data {

    private  String mc_name;
    private  String url;

    public Sub_Category_Data() {
    }

 public void setName(String mc_name) {
        this.mc_name = mc_name;
    }
    public String getName() {
        return mc_name;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUrl() {
        return url;
    }
}

4- 输出快照: 文本假设显示在图像下方。

Output in fragment

我希望我的片段显示与此图像中显示的相同的文本数据

Output I've tested in normal Activity

5- 数据库快照: Database Image

有人知道吗?还是以前遇到过这个问题?因为我迷路了,因为除了在正常活动中工作正常但文本没有显示在片段中的事实之外,没有显示错误。提前谢谢你。

【问题讨论】:

    标签: android-fragments firebase-realtime-database firebaseui


    【解决方案1】:

    看了一遍又一遍后,我在 logcat 中注意到了这一点 “在类中找不到 mc_name 的设置器/字段”

    我已经解决了这个问题。在 model 类 getName()SetName() 方法中,我将它们更改为与我的 firebase 你可以在上面的问题中看到数据库的图片。所以新方法是getMc_name() 和setMc_name()。

    public class Sub_Category_Data {
    
        private  String mc_name;
        private  String url;
    
        public Sub_Category_Data() {
        }
    
        public String getMc_name() {
            return mc_name;
        }
    
        public void setMc_name(String mc_name) {
            this.mc_name = mc_name;
        }
    
        public String getUrl() {
            return url;
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
    }
    

    输出screen shot

    【讨论】:

      猜你喜欢
      • 2020-07-15
      • 1970-01-01
      • 2017-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多