代码之家  ›  专栏  ›  技术社区  ›  Ndong Akwo

在主活动上调用时,碎片回收器视图不会填充远程ddata

  •  -2
  • Ndong Akwo  · 技术社区  · 7 年前

    我不确定我现在遗漏了什么,当我尝试在视图中拖拽列表的位置时,我有点显示存在的回收器视图,但上面没有数据。我没有收到任何错误,但视图中没有填充远程数据。我有一个主活动,它承载一个片段,其内容是根据json的响应动态生成的

    这是我的片段:RCurrency。Java语言

    import android.content.Context;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    import com.android.volley.AuthFailureError;
    import com.android.volley.Request;
    import com.android.volley.RequestQueue;
    import com.android.volley.Response;
    import com.android.volley.VolleyError;
    import com.android.volley.toolbox.StringRequest;
    import com.android.volley.toolbox.Volley;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    
    
    public class RCurrency extends Fragment {
        RecyclerView mRecyclerView;
        List<CurrencyItem> mCurrencyItems;
        String currencies = "Currency";
        Context mContext;
        public static final String URL_STRING = "https://linktoapi.com/";
    
        public RCurrency(){
            //required empty constructor
        }
    
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    
        @Override
        public View onCreateView( LayoutInflater inflater,  ViewGroup container, Bundle savedInstanceState) {
            //fragment inflater
            View view = inflater.inflate(R.layout.fragment_currency_home,container, false);
    
            //recycler view
            mRecyclerView = (RecyclerView) view.findViewById(R.id.currency_recycler_view);
    
            mCurrencyItems = new ArrayList<CurrencyItem>();
    
            StringRequest stringRequest = new StringRequest(Request.Method.GET, URL_STRING,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            try {
                                JSONArray jsonArray = new JSONArray(response);
                                JSONObject jsonObject;
                                for (int i = 0; i <= jsonArray.length()-1; i++) {
                                    jsonObject = jsonArray.getJSONObject(i);
    
                                    CurrencyItem currencyItem = new CurrencyItem();
    
                                    currencyItem.setCurrencyLogo(jsonObject.getString("id"));
                                    currencyItem.setSymbol(jsonObject.getString("symbol"));
                                    currencyItem.setCurrencyName(jsonObject.getString("name"));
                                    mCurrencyItems.add(currencyItem);
                                }
                                CurrencyItemAdapter adapter = new CurrencyItemAdapter(getContext(), mCurrencyItems);
    
    //Problem at this point
                                RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
                                mRecyclerView.setLayoutManager(layoutManager);
                                mRecyclerView.setHasFixedSize(true);
                                mRecyclerView.setAdapter(adapter);
                                adapter.notifyDataSetChanged();
    
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.e("Check response", error);
                        }
                    }){
                @Override
                protected Map<String, String> getParams() throws AuthFailureError {
                    Map<String, String> params = new HashMap<>();
                    params.put("name",currencies);
    
                    return params;
                }
    
                //add request to the volley queue
    
            };
            RequestQueue requestQueue = Volley.newRequestQueue(getContext());
            requestQueue.add(stringRequest);
            return view;
        }
    }
    

    我在这里托管片段的主要活动:MainActivity。Java语言

    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends AppCompatActivity {
    
        private Button logInBtn;
    
        private CurrencyListFragment RCurrency;
    
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    
    //        fragment manager to manage fragments and transactions
    
            FragmentManager fragmentManager = getSupportFragmentManager();
            Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container);
            if (fragment == null){
                fragment = new RCurrency();
    
                fragmentManager.beginTransaction()
                        .add(R.id.fragment_container, fragment)
                        .commit();
            }
    
            logInBtn = (Button) findViewById(R.id.log_in_main_page);
    
            logInBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(MainActivity.this, info.lansachia.cryptoinvest.LoginActivity.class);
                    finish();
                    startActivity(intent);
                }
            });
        }
    
    
    }
    

    我的适配器:CurrencyItemAdapter。Java语言

    import android.content.Context;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import java.util.List;
    
    
    
    public class CurrencyItemAdapter extends RecyclerView.Adapter<CurrencyItemAdapter.MyViewHolder> {
        private List<CurrencyItem> mCurrencyItems;
        private Context mContext;
    
        public CurrencyItemAdapter(Context context, List<CurrencyItem> currencyItems){
            this.mContext = context;
            this.mCurrencyItems = currencyItems;
        }
    
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.list_item_currency, parent, false);
            return new MyViewHolder(view);
        }
    
        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {
            CurrencyItem currencyItem = mCurrencyItems.get(position);
    
            //setting text to currency symbol
            holder.mSymbol.setText(currencyItem.getSymbol());
    
            holder.mSymbol.setTextSize(17);
    
            //currency name
            holder.mName.setText(currencyItem.getCurrencyName());
            holder.mName.setTextSize(17);
    
        }
    
        @Override
        public int getItemCount() {
            return mCurrencyItems.size();
        }
    
        public class MyViewHolder extends RecyclerView.ViewHolder{
            TextView mSymbol;
            TextView mPrice;
            TextView mName;
            TextView mRecommendation;
            ImageView mCurrencyLogo;
    
    
            public MyViewHolder(View itemView) {
                super(itemView);
    
                mSymbol = (TextView)itemView.findViewById(R.id.currency_symbol);
                mPrice = (TextView)itemView.findViewById(R.id.currency_price);
                mName = (TextView)itemView.findViewById(R.id.currency_name);
                mRecommendation = (TextView)itemView.findViewById(R.id.currency_recommendation);
    //            mCurrencyLogo= (ImageView)itemView.findViewById(R.id.currency_icon);
            }
    
        }
    
    
    }
    

    list\u item\u货币。xml

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/linearLayout2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <ImageView
            android:id="@+id/currency_icon"
            android:layout_width="75dp"
            android:layout_height="74dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:contentDescription="@string/currecy_logo"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>
    
        <TextView
            android:id="@+id/currency_symbol"
            android:layout_width="177dp"
            android:layout_height="75dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            app:layout_constraintStart_toEndOf="@+id/currency_icon"
            app:layout_constraintTop_toTopOf="parent"/>
    
        <TextView
            android:id="@+id/currency_name"
            android:layout_width="176dp"
            android:layout_height="29dp"
            android:layout_marginBottom="8dp"
            android:layout_marginStart="91dp"
            android:layout_marginTop="8dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/currency_symbol"
            app:layout_constraintVertical_bias="0.0"/>
    
    
        <TextView
            android:id="@+id/currency_recommendation"
            android:layout_width="101dp"
            android:layout_height="25dp"
            android:layout_marginBottom="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/currency_name"
            app:layout_constraintTop_toBottomOf="@+id/currency_price"/>
    
        <TextView
            android:id="@+id/currency_price"
            android:layout_width="101dp"
            android:layout_height="74dp"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/currency_symbol"
            app:layout_constraintTop_toTopOf="parent"/>
    
    
    </android.support.constraint.ConstraintLayout>
    

    fragment\u货币。xml Xml具有回收器视图,但最终回收器视图托管在main\u活动的布局中。xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:id="@+id/fragment_home_page"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
        <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
                                                android:id="@+id/currency_recycler_view"
                                                android:layout_width="match_parent"
                                                android:layout_height="match_parent"
                                                android:layout_marginBottom="8dp"
                                                android:layout_marginEnd="8dp"
                                                android:layout_marginStart="8dp"
                                                android:layout_marginTop="8dp"
                                                >
        </android.support.v7.widget.RecyclerView>
    </LinearLayout>
    

    此处堆叠跟踪:

    3-03 10:07:16.102 5337-5337/? I/zygote: Not late-enabling -Xcheck:jni (already on)
    03-03 10:07:16.176 5337-5337/? W/zygote: Unexpected CPU variant for X86 using defaults: x86
    03-03 10:07:16.387 5337-5337/info.myapp.currency W/ActivityThread: Application info.myapp.currency is waiting for the debugger on port 8100...
    03-03 10:07:16.400 5337-5337/info.myapp.currency I/System.out: Sending WAIT chunk
    03-03 10:07:17.018 5337-5346/info.myapp.currency I/zygote: Debugger is active
    03-03 10:07:17.032 5337-5337/info.myapp.currency I/System.out: Debugger has connected
    03-03 10:07:17.032 5337-5337/info.myapp.currency I/System.out: waiting for debugger to settle...
    03-03 10:07:17.233 5337-5337/info.myapp.currency I/System.out: waiting for debugger to settle...
    03-03 10:07:17.435 5337-5337/info.myapp.currency I/System.out: waiting for debugger to settle...
    03-03 10:07:17.636 5337-5337/info.myapp.currency I/chatty: uid=10085(u0_a85) info.myapp.currency identical 1 line
    03-03 10:07:17.838 5337-5337/info.myapp.currency I/System.out: waiting for debugger to settle...
    03-03 10:07:18.039 5337-5337/info.myapp.currency I/System.out: waiting for debugger to settle...
    03-03 10:07:18.241 5337-5337/info.myapp.currency I/System.out: waiting for debugger to settle...
    03-03 10:07:18.443 5337-5337/info.myapp.currency I/System.out: waiting for debugger to settle...
    03-03 10:07:18.645 5337-5337/info.myapp.currency I/System.out: debugger has settled (1460)
    03-03 10:07:19.002 5337-5337/info.myapp.currency W/zygote: Skipping duplicate class check due to unrecognized classloader
    03-03 10:07:19.008 5337-5337/info.myapp.currency W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
    03-03 10:07:19.013 5337-5337/info.myapp.currency W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
    03-03 10:07:19.058 5337-5337/info.myapp.currency I/BiChannelGoogleApi: [FirebaseAuth: ] No Fallback module; NOT setting up for lazy initialization
    03-03 10:07:19.095 5337-5337/info.myapp.currency D/FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
    03-03 10:07:19.125 5337-5359/info.myapp.currency W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
    03-03 10:07:19.156 5337-5359/info.myapp.currency I/FirebaseAuth: [FirebaseAuth:] Loading module via FirebaseOptions.
    03-03 10:07:19.156 5337-5359/info.myapp.currency I/FirebaseAuth: [FirebaseAuth:] Preparing to create service connection to gms implementation
    03-03 10:07:19.249 5337-5337/info.myapp.currency I/FirebaseInitProvider: FirebaseApp initialization successful
    03-03 10:07:19.252 5337-5337/info.myapp.currency I/InstantRun: starting instant run server: is main process
    03-03 10:07:19.293 5337-5362/info.myapp.currency I/FA: App measurement is starting up, version: 11910
    03-03 10:07:19.293 5337-5362/info.myapp.currency I/FA: To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
    03-03 10:07:19.293 5337-5362/info.myapp.currency I/FA: To enable faster debug mode event logging run:
                                                                     adb shell setprop debug.firebase.analytics.app info.myapp.currency
    03-03 10:07:19.293 5337-5362/info.myapp.currency D/FA: Debug-level message logging enabled
    03-03 10:07:19.611 5337-5337/info.myapp.currency D/Currency List: Fragment added
    03-03 10:07:19.630 5337-5337/info.myapp.currency D/RCurrency: onCreate Called
    03-03 10:07:19.715 5337-5366/info.myapp.currency D/NetworkSecurityConfig: No Network Security Config specified, using platform default
    03-03 10:07:19.777 5337-5337/info.myapp.currency D/RCurrency: onCreateView Called
    03-03 10:07:19.805 5337-5373/info.myapp.currency D/OpenGLRenderer: HWUI GL Pipeline
    03-03 10:07:19.806 5337-5362/info.myapp.currency D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_screen_class(_sc)=MainActivity, firebase_screen_id(_si)=-8822734687014467414}]
    03-03 10:07:19.884 5337-5373/info.myapp.currency I/OpenGLRenderer: Initialized EGL, version 1.4
    03-03 10:07:19.884 5337-5373/info.myapp.currency D/OpenGLRenderer: Swap behavior 1
    03-03 10:07:19.884 5337-5373/info.myapp.currency W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
    03-03 10:07:19.884 5337-5373/info.myapp.currency D/OpenGLRenderer: Swap behavior 0
    03-03 10:07:19.913 5337-5373/info.myapp.currency D/EGL_emulation: eglCreateContext: 0x8edb3ec0: maj 2 min 0 rcv 2
    03-03 10:07:19.973 5337-5373/info.myapp.currency D/EGL_emulation: eglMakeCurrent: 0x8edb3ec0: ver 2 0 (tinfo 0x9e4d6200)
    03-03 10:07:20.128 5337-5373/info.myapp.currency D/EGL_emulation: eglMakeCurrent: 0x8edb3ec0: ver 2 0 (tinfo 0x9e4d6200)
    03-03 10:07:20.254 5337-5362/info.myapp.currency D/FA: Connected to remote service
    03-03 10:07:20.385 5337-5337/info.myapp.currency D/RCurrency: parseData Called
    03-03 10:07:20.385 5337-5337/info.myapp.currency D/RCurrency: requestData Called
    03-03 10:07:20.437 5337-5344/info.myapp.currency I/zygote: Do partial code cache collection, code=30KB, data=21KB
    03-03 10:07:20.440 5337-5344/info.myapp.currency I/zygote: After code cache collection, code=30KB, data=21KB
    03-03 10:07:20.440 5337-5344/info.myapp.currency I/zygote: Increasing code cache capacity to 128KB
    03-03 10:07:46.609 5337-5346/? W/zygote: Debugger told VM to exit with status -1
    
                                             [ 03-03 10:07:46.610  5337: 5346 D/         ]
                                             HostConnection::get() New Host Connection established 0xa09e4b00, tid 5346
    
    4 回复  |  直到 7 年前
        1
  •  2
  •   Levi Moreira    7 年前

    您是否尝试过先设置适配器,然后再设置布局管理器?

                                mRecyclerView.setAdapter(adapter);
     RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
                                mRecyclerView.setLayoutManager(layoutManager);
                                mRecyclerView.setHasFixedSize(true);
    
                                adapter.notifyDataSetChanged();
    

    此外,您可以在XML中为RecyclerView设置它:

    <... RecyclerView
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"
    </RecyclerView
    
        2
  •  1
  •   LanK    7 年前

    要回答您的问题,请使用kCIInputIntensityKey 在这里: currentImageFilters。setValue(filterIntensity.value,forKey:kCIInputImageKey)

    这是因为CISepiaTone过滤器需要两个参数: 1-inputImage:显示名称为Image的CIImage对象。

    2-输入强度:一个NSNumber对象,其属性类型为CIAttributeTypeScalar,显示名称为强度。

        3
  •  0
  •   ckern    7 年前

    不完全确定这是问题所在,但在初始创建时可能需要布局管理器和适配器。我会尝试最初设置这些,然后在加载数据后,您应该能够执行以下操作:

    CurrencyItemAdapter adapter = new CurrencyItemAdapter(getContext(), mCurrencyItems);
    mRecyclerView.swapAdapter(adapter, true);
    
        4
  •  0
  •   Mobile Team ADR-Flutter    7 年前

    您可以像下面的代码一样更改回收器视图布局集。。

      mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    

    如果上述代码有效,pl接受答案。