2017-01-09 3 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

Вы надеваете» t необходимо использовать OnCardClicked в detail.java деятельности. Используйте 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

Смежные вопросы