2017-01-09 4 views
0

재활용보기의 각 항목을 클릭하면이 응용 프로그램이 제대로 작동하지 않는 이유 항목의 위치에 대한 토스트가 나타납니다.하지만 각 항목 (카드보기) 새로운 활동 앱 크래시를 여는 중입니다. 나는 무엇이 잘못되었는지 모른다.recycleview의 요소를 클릭하면 응용 프로그램이 계속 충돌합니다

GalleryFragment.java

package com.example.kiran.cr7; 

    import android.content.Context; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.support.v4.app.Fragment; 
    import android.support.v7.widget.CardView; 
    import android.support.v7.widget.GridLayoutManager; 
    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 android.widget.AdapterView; 
    import android.widget.GridView; 
    import android.widget.Toast; 

    import java.util.ArrayList; 


    /** * A simple {@link Fragment} subclass. */ public class GalleryFragment extends Fragment implements Adapter.OnCardClickListner { 


     public GalleryFragment() { 
      // Required empty public constructor 
     } 


     private RecyclerView mrecycleview; 
     private CardView mcardview; 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      // Inflate the layout for this fragment 
      View view = inflater.inflate(R.layout.fragment_gallery, container, false); 
      mrecycleview = (RecyclerView)view.findViewById(R.id.recycle_view); 
      mcardview = (CardView)view.findViewById(R.id.card_view); 

      //improve performance 
      mrecycleview.setHasFixedSize(true); 

      LinearLayoutManager manager = new LinearLayoutManager(view.getContext()); 
      mrecycleview.setLayoutManager(manager); 

      ArrayList<Item> itemlist = dummies(); 

      //set adapter //  Adapter adapter = new Adapter(view.getContext(),itemlist); //  mrecycleview.setAdapter(adapter); //  adapter.setOnCardClickListner(this); 

      Adapter adapter = new Adapter(view.getContext(),itemlist); 
      mrecycleview.setAdapter(adapter); 
      adapter.setOnCardClickListner(this); 

      return view; 
     } 
     private ArrayList<Item> dummies() { 
      ArrayList<Item> list = new ArrayList<>(); 
      for (int i = 0; i < 6; i++) { 
       if (i == 0) { 
        Item item = new Item(); 
        item.id = i; 
        item.text = "RonaldoPhoto" + (i); 
        item.img = "http://wallpapercave.com/wp/sIggTrG.jpg"; 
        list.add(item); 
       } else if (i == 1) { 
        Item item = new Item(); 
        item.id = i; 
        item.text = "RonaldoPhoto" + (i); 
        item.img = "http://i2.wp.com/www.footballwood.com/wp-content/uploads/2015/01/Ronaldo-Best-Wallpapers.jpg"; 
        list.add(item); 
       } else if (i == 2) { 
        Item item = new Item(); 
        item.id = i; 
        item.text = "RonaldoPhoto" + (i); 
        item.img = "http://www.magazinefuse.com/wp-content/uploads/2015/09/7-i476725-1024x640.jpg"; 
        list.add(item); 
       } else if (i == 3) { 
        Item item = new Item(); 
        item.id = i; 
        item.text = "RonaldoPhoto" + (i); 
        item.img = "https://i.ytimg.com/vi/SwHv6xGGBBQ/maxresdefault.jpg"; 
        list.add(item); 
       }else if (i == 4) { 
        Item item = new Item(); 
        item.id = i; 
        item.text = "RonaldoPhoto" + (i); 
        item.img = "https://i.ytimg.com/vi/WrCfkR4Qcns/maxresdefault.jpg"; 
        list.add(item); 
       } 

       else if (i == 5) { 
        Item item = new Item(); 
        item.id = i; 
        item.text = "RonaldoPhoto" + (i); 
        item.img = "http://images.latinpost.com/data/images/full/101477/cristiano-ronaldo-real-madrid.jpg"; 
        list.add(item); 
       } 
      } 
      return list; 
     } 

     @Override 
     public void OnCardClicked(View view, int position) { 
      Log.d("OnClick", "Card Position" + position); 
      Toast.makeText(getContext(),"click"+position,Toast.LENGTH_SHORT).show(); 
      Intent in= new Intent(view.getContext(),Detail.class); 
      in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(in); 

     } } 

Adapter.java

package com.example.kiran.cr7; 
    import android.app.Activity; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.support.v4.app.Fragment; 
    import android.support.v4.app.FragmentManager; 
    import android.support.v7.widget.CardView; 
    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 android.widget.Toast; 

    import com.squareup.picasso.Picasso; 

    import java.util.ArrayList; 


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

     private RecyclerView mRecyclerView; 
     private Context context; 
     private ArrayList<Item> itemlist; 

     OnCardClickListner onCardClickListner; 


     public Adapter(Context context, ArrayList<Item> itemlist){ 
      this.context = context; 
      this.itemlist = itemlist; 
     } 

     @Override 
     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
      View view = inflater.from(parent.getContext()).inflate(R.layout.cardview,parent,false); 


      mRecyclerView = (RecyclerView) view.findViewById(R.id.recycle_view); 
      ViewHolder viewholder = new ViewHolder(view); 
      return viewholder; 

     } 

     //bind views with data 
     @Override 
     public void onBindViewHolder(ViewHolder holder, final int position) { 
      final Item item = itemlist.get(position); 

      //get element form your dataset at this position 
      //replace the contents of the view with that element 
      Picasso.with(context) 
        .load(item.img) 
        .placeholder(R.drawable.fern) 
        .error(android.R.drawable.stat_notify_error) 
        .into(holder.cardimage); 
      holder.cardtext.setText(item.text); 

      holder.card_view.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        onCardClickListner.OnCardClicked(v,position); 
        Intent in = new Intent(v.getContext(), Detail.class); 
        in.putExtra("item",item); 
        in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        //context.startActivity(in); 
       } 
      });  
     } 

     @Override 
     public int getItemCount() { 
      if(itemlist != null){ 
       return itemlist.size(); 
      } 
      return 0; 
     } 

     //provide the reference to the views for each data item 
     //ViewHolder class 
     //since it is static it uses only single memory so protect memory leak : a design pattern for android 
     public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 

      public CardView card_view; 
      public TextView cardtext; 
      public ImageView cardimage; 

      //connects which view belongs to which layout 
      public ViewHolder(View itemView) { 
       super(itemView); 
       card_view = (CardView)itemView.findViewById(R.id.card_view); 
       cardtext = (TextView)itemView.findViewById(R.id.cardtext); 
       cardimage = (ImageView)itemView.findViewById(R.id.cardimage); 
      } 

      @Override 
      public void onClick(View view) { 

      } 
     } 
     public interface OnCardClickListner { 
      void OnCardClicked(View view, int position); 
     } 

     public void setOnCardClickListner(OnCardClickListner onCardClickListner) { 
      this.onCardClickListner = onCardClickListner; 
     } 
    } 

상세

 package com.example.kiran.cr7; 

    import android.app.DownloadManager; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.Toast; 

    import com.squareup.picasso.Picasso; 

    import java.util.ArrayList; 

    public class Detail extends AppCompatActivity implements  Adapter.OnCardClickListner { 

     private ImageView detailimage; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_detail); 

      detailimage = (ImageView)findViewById(R.id.detailimage); 



     } 

     @Override 
     public void OnCardClicked(View view, int position) { 
      Log.d("OnClick", "Card Position" + position); 
      if(getIntent().getSerializableExtra("item") != null){ 
       Item i = (Item)getIntent().getSerializableExtra("item"); 
       Picasso.with(this) 
         .load(i.img) 
         .placeholder(R.drawable.fern) 
         .error(android.R.drawable.stat_notify_error) 
         .into(detailimage); 

      } 
     } } 
+4

stracktrace/crash 로그를 공유 할 수 있습니까? –

답변

0

당신은 돈 ' detail.java 활동에서 OnCardClicked을 사용해야합니다. serializable을 사용하여 한 활동의 ​​데이터를 다른 활동의 데이터로 보냅니다. 한 활동에서 다른 활동으로 데이터를 전송하려면 OnCardClicked.onBindViewHolder을 사용하십시오.

package com.example.kiran.cr7; 

    import android.app.DownloadManager; 
    import android.content.Context; 
    import android.net.ConnectivityManager; 
    import android.net.NetworkInfo; 
    import android.net.Uri; 
    import android.os.Bundle; 
    import android.app.Activity; 
    import android.view.View; 
    import android.view.animation.Animation; 
    import android.view.animation.AnimationUtils; 
    import android.widget.Button; 
    import android.widget.ImageView; 
    import android.widget.Toast; 

    import com.squareup.picasso.Picasso; 

    public class Test extends Activity { 
     private ImageView detailimage; 
     private Button download; 
     DownloadManager downloadManager; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_test); 

      download = (Button) findViewById(R.id.Download); 
      detailimage = (ImageView) findViewById(R.id.detailimage); 
      final Animation animAlpha = AnimationUtils.loadAnimation(this,R.anim.anim_alpha); 

      if (getIntent().getSerializableExtra("item") != null) { 
       final Item i = (Item) getIntent().getSerializableExtra("item"); 
       Picasso.with(this) 
         .load(i.img) 
         .resize(500,600) 
         .placeholder(R.drawable.fern) 
         .error(android.R.drawable.stat_notify_error) 
         .into(detailimage); 

       ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
       NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
       if (networkInfo != null && networkInfo.isConnected()) { 
        //Toast.makeText(Test.this, "Network Connection available", Toast.LENGTH_LONG).show(); 
       } else { 
        Toast.makeText(Test.this, "No Network Connection", Toast.LENGTH_LONG).show(); 
       } 

       download.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         view.startAnimation(animAlpha); 
         downloadManager =(DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
         Uri uri = Uri.parse(i.img); 
         DownloadManager.Request request = new DownloadManager.Request(uri); 
         request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
         Long reference = downloadManager.enqueue(request); 
        } 
       }); 

      } 

     } 
    } 
+0

다른 사람들을 돕기 위해 자신의 질문에 답한 것이 좋습니다. 오류 메시지를 텍스트로 포함시켜 검색 할 수 있도록 질문을 확장하는 것이 좋습니다. – akton

관련 문제