2016-07-30 7 views
0

2 개의 RecyclerView이 하나의 레이아웃에있는 응용 프로그램을 작성하고 있습니다. 범주별로 텍스트를 설정하고 범주별로 설정합니다. 내가이 코드에서 recyclerview에 null 값을 표시하도록 내 코드를 디버깅 할 때 어댑터 내에서 을 참조하십시오.항목이 다른 항목을 클릭 할 때 recyclerview의 항목을 변경하십시오.

나는 카테고리 항목을 선택하고 그 카테고리를 포함하는 텍스트를주고 싶습니다.

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { 
    private List<TextJson> listtext; 
    private List<CategoryJson> horizentallylist; 
    private RecyclerView recyclerView , horizantalrcview; 
    private RecyclerView.LayoutManager layoutManager; 
    private RecyclerView.Adapter adapter; 

    String textUrl = "http:www.extample.com/texturl.php"; 
    String categoryUrl ="http:www.extample.com/categoryurl.php"; 
    private static final String TAG = MainActivity.class.getSimpleName(); 
    private JSONArray result; 
    ArrayAdapter<String> adapterSpin; 
    CategoryJson categoryJson; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     recyclerView = (RecyclerView) findViewById(R.id.recyclerView_text); 
     horizantalrcview = (RecyclerView)findViewById(R.id.recyclerView_cate); 
     recyclerView.setHasFixedSize(true); 
     layoutManager = new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(layoutManager); 
     listtext = new ArrayList<>(); 
     horizentallylist = new ArrayList<>(); 
     getData(); 
     verticalData(); 
    } 

    private void getData() { 
     final ProgressDialog loading = ProgressDialog.show(this, "Loading Data", "Please wait...", false, false); 
     loading.setCancelable(true); 
     JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(textUrl, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.e("text", "resopnce is =>" + response); 
         loading.dismiss(); 
         verticalParse(response); 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
        } 
       }); 
     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     requestQueue.add(jsonArrayRequest); 
    } 

    private void verticalParse(JSONArray array) { 

     for (int i = 0; i < array.length(); i++) { 
      TextJson jsonitem = new TextJson(); 
      JSONObject json = null; 
      try { 
       json = array.getJSONObject(i); 
       String text = json.getString("txt"); 
       String txtcate = json.getString("category"); 
       jsonitem.setText_status(text); 
       jsonitem.setCategory(txtcate); 
       Log.e("text", "is==> " + text); 
       Log.e("cate", "is==> " + txtcate); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      listtext.add(jsonitem); 
     } 

     //Finally initializing our adapter 
     adapter = new VerticalAdapter(listtext, this); 
     adapter.notifyDataSetChanged(); 
     //Adding adapter to recyclerview 
     recyclerView.setAdapter(adapter); 
    } 



    private void verticalData() { 
     final ProgressDialog loading = ProgressDialog.show(this, "Loading Data", "Please wait...", false, false); 
     loading.setCancelable(true); 
     JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(categoryUrl, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.e("Response is", "first==>" + response); 
         loading.dismiss(); 
         parseData(response); 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         if (error instanceof NoConnectionError) { 
          Log.e("NoConnectionError>>", "NoConnectionError...."); 
         } else if (error instanceof AuthFailureError) { 
          Log.e("AuthFailureError>>>", "AuthFailureError..."); 
         } else if (error instanceof ServerError) { 
          Log.e("ServerError>>>>>>>>>", "ServerError......."); 
         } else if (error instanceof NetworkError) { 
          Log.e("NetworkError>>>>>>>>>", "NetworkError......."); 
         } else if (error instanceof ParseError) { 
          Log.e("ParseError>>>>>>>>>", "ParseError......."); 
         } else if (error instanceof TimeoutError) { 
          Log.d("TimeoutError>>>>>>>>>", "TimeoutError......."); 
         } 
        } 
       }); 
     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     requestQueue.add(jsonArrayRequest); 
    } 

    private void parseData(JSONArray array) { 
     for (int i = 0; i < array.length(); i++) { 
      CategoryJson model1 = new CategoryJson(); 
      JSONObject json = null; 
      try { 
       json = array.getJSONObject(i); 
       String imgurl = json.getString("cat_img"); 
       String imgname = json.getString("category"); 
       Log.e("value in","link=>"+imgurl); 
       Log.e("value in","imagename=>"+imgname); 
       model1.setImageUrl(imgurl); 
       model1.setName(imgname); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      horizentallylist.add(model1); 
     } 
     //Finally initializing our adapter 
     adapter = new HorizantalAdapter(horizentallylist, this); 
     adapter.notifyDataSetChanged(); 
     //Adding adapter to recyclerview 
     horizantalrcview.setAdapter(adapter); 
    } 


    private void selectData() { 
     NewModel newModel = new NewModel(); 
     final ProgressDialog loading = ProgressDialog.show(this, "Loading Data", "Please wait...", false, false); 
     loading.setCancelable(true); 
     String txtselect =newModel.getItem().toString(); 
     String select_cate ="http:www.extample.com/filter.php"+selectitem; 

     JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(select_cate , 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.e("text", "resopnce is =>" + response); 
         loading.dismiss(); 
         selectParse(response); 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
        } 
       }); 
     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     requestQueue.add(jsonArrayRequest); 
    } 

    private void selectParse(JSONArray array) { 
     for (int i = 0; i < array.length(); i++) { 
      TextJson jsonitem = new TextJson(); 
      JSONObject json = null; 
      try { 
       json = array.getJSONObject(i); 
       String text = json.getString("txt"); 
       String txtcate = json.getString("category"); 
       jsonitem.setText_status(text); 
       jsonitem.setCategory(txtcate); 
       Log.e("text", "is==> " + text); 
       Log.e("cate", "is==> " + txtcate); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      listtext.add(jsonitem); 
     } 
     //Finally initializing our adapter 
     adapter = new VerticalAdapter(listtext, this); 
     adapter.notifyDataSetChanged(); 
     //Adding adapter to recyclerview 
     recyclerView.setAdapter(adapter); 
    } 
} 

HorizantalAdapter

public class HorizantalAdapter extends RecyclerView.Adapter<HorizantalAdapter.ViewHolder> { 

    private ImageLoader imageLoader; 
    private Context context; 
    List<CategoryJson> listmodel; 
    NewModel newModel = new NewModel(); 
    String link; 

    public HorizantalAdapter(List<CategoryJson> listmodel, Context context) { 
     super(); 
     this.listmodel = listmodel; 
     this.context = context; 
     setHasStableIds(false); 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.text_horigentally, parent, false); 
     HorizantalAdapter.ViewHolder viewHolder = new HorizantalAdapter.ViewHolder(v); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(final HorizantalAdapter.ViewHolder holder, final int position) { 
     CategoryJson imgModel = listmodel.get(position); 
     imageLoader =CustomVolleyRequest.getInstance(context).getImageLoader(); 
     imageLoader.get(imgModel.getImageUrl(),imageLoader.getImageListener(holder.imageView,R.drawable.placeholder,android.R.drawable.ic_dialog_alert)); 
     holder.imageView.setImageUrl(imgModel.getImageUrl(),imageLoader); 
     holder.textViewName.setText(imgModel.getName()); 
     holder.imageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       link = listmodel.get(position).getName(); 
       newModel.setItem(link); 
       Toast.makeText(context, "select item select" +link, Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
    @Override 
    public int getItemCount() { 
     return listmodel.size(); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    class ViewHolder extends RecyclerView.ViewHolder { 
     public NetworkImageView imageView; 
     public TextView textViewName; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      imageView = (NetworkImageView) itemView.findViewById(R.id.imageView_img); 
      imageView.setScaleType(NetworkImageView.ScaleType.FIT_CENTER); 
      textViewName = (TextView) itemView.findViewById(R.id.text_cate); 


      } 
     } 
    } 

VerticalAdapter

public class VerticalAdapter extends RecyclerView.Adapter<VerticalAdapter.ViewHolder> { 
    private Context context; 
    String link; 
    List<TextJson> listmodel; 
    private Activity parentActivity; 
    public VerticalAdapter(List<TextJson> listmodel, Context context) { 
     super(); 
     this.listmodel = listmodel; 
     this.context = context; 
    } 
    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.text_virtically, parent, false); 
     ViewHolder viewHolder = new ViewHolder(v); 
     return viewHolder; 
    } 
    @Override 
    public void onBindViewHolder(ViewHolder holder, final int position) { 
     TextJson model = listmodel.get(position); 
     holder.textViewName.setText(model.getText_status()); 
     holder.textViewName.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       link = listmodel.get(position).getText_status(); 
       return true; 
      } 
     }); 
    } 
    @Override 
    public int getItemCount() { 
     return listmodel.size(); 
    } 

    class ViewHolder extends RecyclerView.ViewHolder { 
     public TextView textViewName; 
     public ViewHolder(View itemView) { 
      super(itemView); 
      textViewName = (TextView) itemView.findViewById(R.id.texting_status); 
     } 
     } 

} 

로그인

08-01 18:28:14.021 11378-11378/com.vm.recyclervirtical E/text: is==> Stinging Jellyfish Come to Jersey, But Beaches Sti 
08-01 18:28:14.021 11378-11378/com.vm.recyclervirtical E/cate: is==> speech 
08-01 18:28:14.021 11378-11378/com.vm.recyclervirtical E/text: is==> Koala Facts for Kids | Australian Animals 
08-01 18:28:14.021 11378-11378/com.vm.recyclervirtical E/cate: is==> motivational 
08-01 18:28:14.021 11378-11378/com.vm.recyclervirtical E/text: is==> Antarctic penguins ielts reading passage 
08-01 18:28:14.021 11378-11378/com.vm.recyclervirtical E/cate: is==> dance 
08-01 18:28:14.061 11378-11378/com.vm.recyclervirtical E/Cache is: 0_0==>[email protected] 
08-01 18:28:24.861 11378-11378/com.vm.recyclervirtical E/text: resopnce is =>http://www.example.com/filtered/evideo/json/jsoncategory.php?category=motivational 
08-01 18:28:25.331 11378-11378/com.vm.recyclervirtical E/text: resopnce is =>[{"txt":"Koala Facts for Kids | Australian Animals"}] 
08-01 18:28:25.351 11378-11378/com.vm.recyclervirtical E/text: is==> Koala Facts for Kids | Australian Animals 
,451,515,

이미지

enter image description here

이 광범위한 문제이다, 그래서에 클릭 리스너를 전달하는 것입니다 몇 가지 기본적인 접근 방식을 제안 할 수

debug app

+0

에서 오는 토스트 메시지의 경우 네트워크 요청을 시작하여 카테고리를 가져 와서 적절한 어댑터를 설정합니까? –

+0

토스트 메시지가 작동 중입니다 ... – newdeveloper

+0

오른쪽. 계속 유지할 수 있지만 클릭 방법으로 다른 어댑터를로드 할 수 있습니다. 그 효과를 얻기 위해 무엇을 시도 했습니까? –

답변

0

를 디버깅 후 어댑터의 constructor 당신이 편집에 대응하여 수평 어댑터

private void parseData(JSONArray array) { 
    ......... 

    /*** Define the listener ***/ 
    final View.OnClickListener horizontalClickListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      link = listmodel.get(position).getName(); 
      newModel.setItem(link); 
      Toast.makeText(context, "select item select" +link, Toast.LENGTH_SHORT).show(); 

      // TODO: Make Volley request for Categories here... 
      // Should be able to set other adapter in onResponse there 
     } 
    }; 

    /*** Pass in the listener reference ***/ 
    adapter = new HorizantalAdapter(horizentallylist, this, horizontalClickListener); 
} 

를 설정 한 활동에서 다음

public class HorizantalAdapter extends RecyclerView.Adapter<HorizantalAdapter.ViewHolder> 

    /*** Store a reference ***/ 
    private View.OnClickListener clickListener; 

    /*** Add that reference ***/ 
    public HorizantalAdapter(List<CategoryJson> listmodel, Context context, View.OnClickListener clickListener) { 
     super(); 
     this.listmodel = listmodel; 
     this.context = context; 
     setHasStableIds(false); 

     /*** Set the reference ***/ 
     this.clickListener = clickListener; 
    } 

    ....... 

    @Override 
    public void onBindViewHolder(final HorizantalAdapter.ViewHolder holder, final int position) { 
     ......... 

     /*** Use the reference ***/ 
     holder.imageView.setOnClickListener(clickListener); 
    } 

는 메시지 대신에 대해 어떻게이 라인

Log.e("text", "is==> " + text); 
Log.e("cate", "is==> " + txtcate); 
+0

'adapter = new HorizantalAdapter (horizentallylist, this);이 링크는 내 활동에서 오류를 표시합니다. – newdeveloper

+0

그 의미가 확실하지 않습니다 ...하지만 ... 세 번째 매개 변수를 추가했습니다. 장소를 복사하여 붙여 넣기 전에 내가 한 일을 이해하려고 노력하십시오. –

+0

아마도 **이 ** 단어는 오류를 발생시킵니다. 어댑터에 명시적인 컨텍스트를 전달하십시오. – faranjit

관련 문제