2017-01-20 9 views
0

私はチュートリアルを作成しています。選択可能なオプションのカードを使ってRecyclerViewのスクリーンを作成しました。選択可能なオプションの1つで、ユーザーに新しいカードactivityを持たせてください。これには、選択したカードに関する詳細情報&があります。私の問題は、特定のカードの特質を次のカードに移そうとしたときです。SlideViewActivity.javaactivity私は成功することができません。私はarrayに私のリストを変換しようとしていましたが、私はnullの値を得ています(これは私が知っているすべての私の構文のためかもしれません)。新しいアクティビティにリスト情報を渡す

任意の説明&ガイダンスは、あなたが他のコードも同様にしたいと考えていれば教えてください。

Properties.javaを追加
public class Adapter extends RecyclerView.Adapter<Adapter.MyViewHolder> { 
private Context mContext; 
private List<Properties> dogList; 

public class MyViewHolder extends RecyclerView.ViewHolder { 
    public TextView title, count; 
    public ImageView thumbnail, overflow; 

    public MyViewHolder(View view) { 
     super(view); 
     title = (TextView) view.findViewById(R.id.title); 
     count = (TextView) view.findViewById(R.id.count); 
     thumbnail = (ImageView) view.findViewById(R.id.thumbnail); 
     overflow = (ImageView) view.findViewById(R.id.overflow); 
    } 
} 

public Adapter(Context mContext, List<Properties> dogList) { 
    this.mContext = mContext; 
    this.dogList = dogList; 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.card, parent, false); 
    return new MyViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(final MyViewHolder holder, int position) { 
    Properties dog = dogList.get(position); 
    holder.title.setText(dog.getName()); 
    // loading dog cover using Glide library 
    Glide.with(mContext).load(dog.getThumbnail()).into(holder.thumbnail); 
    holder.overflow.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      showPopupMenu(holder.overflow); 
     } 
    }); 
} 

/** 
* Showing popup menu when tapping on icon 
*/ 
private void showPopupMenu(View view) { 
    // inflate menu 
    PopupMenu popup = new PopupMenu(mContext, view); 
    MenuInflater inflater = popup.getMenuInflater(); 
    inflater.inflate(R.menu.menu, popup.getMenu()); 
    popup.setOnMenuItemClickListener(new MyMenuItemClickListener()); 
    popup.show(); 
} 

/** 
* Click listener for popup menu items 
*/ 
class MyMenuItemClickListener implements PopupMenu.OnMenuItemClickListener { 

    public MyMenuItemClickListener() { 
    } 

    @Override 
    public boolean onMenuItemClick(MenuItem menuItem) { 
     switch (menuItem.getItemId()) { 
      case R.id.action_add_favourite: 
       Toast.makeText(mContext, "Add to favourite", Toast.LENGTH_SHORT).show(); 
       return true; 
      case R.id.action_more_info: 
       Intent slideStart = new Intent(mContext, SlideViewActivity.class); 
       String[] dogArray = new String[dogList.size()]; 
       slideStart.putExtra("List", dogArray); 
       Log.e("putting extra", String.valueOf(dogArray[0])); 
       //TODO:MAKE NAME TRANSFERS WORK 
       mContext.startActivity(slideStart); 
       return true; 
      default: 
     } 
     return false; 
    } 
} 

public class Properties { 
private String name; 
private String info; 
private int thumbnail; 

public Properties() { 
} 

public Properties(String name, String info, int thumbnail) { 
    this.name = name; 
    this.info = info; 
    this.thumbnail = thumbnail; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getInfo() { 
    return info; 
} 

public void getInfo(String info) { 
    this.info = info; 
} 

public int getThumbnail() { 
    return thumbnail; 
} 

public void setThumbnail(int thumbnail) { 
    this.thumbnail = thumbnail; 
} 
} 

答えて

1

TSerializableある場合は、ArrayList<T>を渡すことができます。例えば

ArrayList<String> list = new ArrayList<String>(); 
intent.putExtra("list", list); 

あなた配列がdogList.size() -d NULL値であるデータを

+0

は、私が最も簡単になるこの方法を見つけました名前の値を取得することに問題がありますが、これはおそらく私の構文です。私はもう少し試してみた後に大きな問題がある場合はお知らせします、ありがとう:) – lexalenka

0

を抽出するために使用getSerializableExtra

​​

ここにはnullが記録されています。

Log.e("putting extra", String.valueOf(dogArray[0])); 

は、それはあなたがPropertiesのために持っているクラスのどのようなタイプではない明らかだが、それはあなたのクラスではなく、java.util.Propertiesyou should implement Parcelable on that classであれば、あなたは

intent.putParcelableArrayList("List", dogList) 

ヒントを持っていると思います:

しかし、あなたがnullを得ることを心配している場合、大文字小文字は問題になります。あなたは、キー= "List"を置くので、あなたはその::

  1. まず

しばらくの間、可能なキー= "list"または何か他のものが、"List"

0

二つの方法を取得していないことを確認してくださいインテントを使用してリストを送信する::

Intent slideStart = new Intent(mContext, SlideViewActivity.class); 
slideStart.putExtra("List", dogList); 
mContext.startActivity(slideStart); 

それは::

であるしかし、その意図::

ArrayList<Properties> dogList =(ArrayList<Properties>) getIntent().getExtras().getSerializable("List"); 
  1. 第二の方法を受けながら、あなたのクラスProperties今すぐ

    "シリアライズ" を実装する必要がありますとしてのリストを渡します。 :ライブラリを使用

1つのライブラリi以下のような::

Type listType = new TypeToken<List<Properties>>() { 
         }.getType(); 
String listString=new Gson().toJson(dogList,listType); 

パス文字列にそのリストを変換し、この送信中リストについては、だから、&その逆、

compile 'com.google.code.gson:gson:2.4' 

をArrayListに文字列を変換するためにそこよ:::目的とした文字列として、この単純な

Intent slideStart = new Intent(mContext, SlideViewActivity.class); 
slideStart.putExtra("List", listString); 
mContext.startActivity(slideStart); 

そして、他の活動にそれを取り戻すしばらく::

String listString =getIntent().getExtras().getString("List"); 
Type listType = new TypeToken<List<Properties>>() {}.getType(); 
List<Properties> list=new Gson().fromJson(listString, listType); 

もっと助けが必要な場合は教えてください。

0

私は自分のコードを共有します。サイズを取得することができる - を見て、疑問を持っている場合は、私

にpingを送信してくださいDataAdapter.java

package com.example.vishnum.indiavideo; 
import android.content.Context; 
import android.content.Intent; 
import android.provider.MediaStore; 
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.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.bumptech.glide.Glide; 

import java.util.ArrayList; 
import java.util.List; 

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> { 
    private Context context; 
    List<Video_Details> video; 

    public DataAdapter(List<Video_Details> video, Context context) { 
     super(); 
     this.context = context; 
     this.video = video; 
    } 

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

    @Override 
    public void onBindViewHolder(final ViewHolder holder, final int position) { 
     final Video_Details videoDetails = video.get(position); 
     String url; 
     final String VideoID; 

     holder.title.setText(video.get(position).getTitle()); 

     VideoID= video.get(position).getV_id(); 
     url = video.get(position).getThumb(); 

     Glide.with(context) 
       .load(url) 
       .override(150,70) 
       .into(holder.thumb); 
     //viewHolder.thumb.setText(android.get(i).getVer()); 
     // viewHolder.tv_api_level.setText(android.get(i).getApi()); 

     holder.vm.setOnClickListener(new View.OnClickListener() { 
             @Override 
             public void onClick(View v) { 
              Toast.makeText(v.getContext(), "You Clicked"+video.get(position).getV_id(), Toast.LENGTH_SHORT).show(); 
              Intent intent = new Intent(v.getContext(),Play_Video.class); 
              intent.putExtra("VideoId",(video.get(position).getV_id())); 
              intent.putExtra("Title",(video.get(position).getTitle())); 
              v.getContext().startActivity(intent); 


             } 
            } 

     ); 
    } 

    @Override 
    public int getItemCount() { 
     return video.size(); 
    } 




    public class ViewHolder extends RecyclerView.ViewHolder{ 
     public TextView title; 
     public ImageView thumb; 
     public String videoid; 
     public View vm; 
     public ViewHolder(View view) { 
      super(view); 
      vm = view; 
      title = (TextView)view.findViewById(R.id.title); 
      thumb = (ImageView) view.findViewById(R.id.thumb); 



      //tv_version = (TextView)view.findViewById(R.id.tv_version); 
      //tv_api_level = (TextView)view.findViewById(R.id.tv_api_level); 

     } 
    } 


} 

Video_Details.java

package com.example.vishnum.indiavideo; 
public class Video_Details { 
    private String id; 
    private String v_id; 
    private String title; 
    private String thumb; 

    public String getId() { 
     return id; 
    } 

    public String getV_id() { 
     return v_id; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public String getThumb() { 
     return (Constants.urlvideo+v_id+"/0.jpg"); 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public void setV_id(String v_id) { 
     this.v_id = v_id; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public void setThumb(String v_id) { 
     this.thumb =Constants.urlvideo+v_id+"/0.jpg"; 
    } 
} 
関連する問題