2017-07-08 29 views
-2

我正在使用cardview在gridview中显示项目。我想打开一个新的活动,但根据我的代码,它显示了对项目位置的敬酒。我没有得到我犯错的地方,所以请帮助我。预先感谢帮助,谢谢。点击cardview时无法打开新的活动,但它只显示烤面包

DataModel.class

public class DataModel { 


    public String text; 
    public int drawable; 
    public String color; 

    public DataModel(String t, int d, String c) 
    { 
     text=t; 
     drawable=d; 
     color=c; 
    } 
} 

RecyclerViewAdapter.class

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

    ArrayList<DataModel> mValues; 
    Context mContext; 
    protected ItemListener mListener; 

    public RecyclerViewAdapter(Context context, ArrayList<DataModel> values, ItemListener itemListener) { 

     mValues = values; 
     mContext = context; 
     mListener=itemListener; 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

     public TextView textView; 
     public ImageView imageView; 
     public RelativeLayout relativeLayout; 
     DataModel item; 

     public ViewHolder(View v) { 

      super(v); 

      v.setOnClickListener(this); 
      textView = (TextView) v.findViewById(R.id.textView); 
      imageView = (ImageView) v.findViewById(R.id.imageView); 
      relativeLayout = (RelativeLayout) v.findViewById(R.id.relativeLayout); 

     } 

     public void setData(DataModel item) { 
      this.item = item; 

      textView.setText(item.text); 
      imageView.setImageResource(item.drawable); 
      relativeLayout.setBackgroundColor(Color.parseColor(item.color)); 

     } 


     @Override 
     public void onClick(View view) { 
      if (mListener != null) { 
       mListener.onItemClick(item); 
      } 
     } 
    } 

    @Override 
    public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View view = LayoutInflater.from(mContext).inflate(R.layout.recycler_view_item, parent, false); 

     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder Vholder, int position) { 
     Vholder.setData(mValues.get(position)); 


    } 

    @Override 
    public int getItemCount() { 

     return mValues.size(); 
    } 

    public interface ItemListener { 
     void onItemClick(DataModel item); 
    } 

} 

MainActivity类别

public class MainActivity extends AppCompatActivity implements RecyclerViewAdapter.ItemListener { 


     RecyclerView recyclerView; 
     ArrayList<DataModel> arrayList; 

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


      recyclerView = (RecyclerView) findViewById(R.id.recyclerView); 
      arrayList = new ArrayList<>(); 
      arrayList.add(new DataModel("Item 1", R.drawable.downtoearth, "#FFFFFF")); 
      arrayList.add(new DataModel("Item 2", R.drawable.beer, "#3E51B1")); 
      arrayList.add(new DataModel("Item 3", R.drawable.ferrari, "#673BB7")); 
      arrayList.add(new DataModel("Item 4", R.drawable.jetpack_joyride, "#4BAA50")); 
      arrayList.add(new DataModel("Item 5", R.drawable.three_d, "#F94336")); 
      arrayList.add(new DataModel("Item 6", R.drawable.terraria, "#0A9B88")); 

      RecyclerViewAdapter adapter = new RecyclerViewAdapter(this, arrayList, this); 
      recyclerView.setAdapter(adapter); 


      /** 
      AutoFitGridLayoutManager that auto fits the cells by the column width defined. 
      **/ 

      AutoFitGridLayoutManager layoutManager = new AutoFitGridLayoutManager(this, 300); 
      recyclerView.setLayoutManager(layoutManager); 


      /** 
      Simple GridLayoutManager that spans two columns 
      **/ 
      GridLayoutManager manager = new GridLayoutManager(this, 2, GridLayoutManager.VERTICAL, false); 
      recyclerView.setLayoutManager(manager); 
     } 

     @Override 
     public void onItemClick(DataModel item) { 

     //here toast is 
     Toast.makeText(getApplicationContext(), item.text + " is clicked", 
      Toast.LENGTH_SHORT).show(); 

     } 
    } 

编辑后,我在intent.putExtra命令

@覆盖 公共无效onItemClick(DataModel的项目){

Intent intent = new Intent(MainActivity.this, Yojana.class); 
    intent.putExtra("dataitem", item); 
    startActivity(intent); 

} 

Yojana.class

公共类由旬扩展AppCompatActivity {

得到错误
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_yojana); 
    getIntent().getParcelableExtra("dataitem"); 

} 

logcaterror:

Error:(56, 15) error: no suitable method found for 
    putExtra(String,DataModel) 
    method Intent.putExtra(String,boolean) is not applicable 
    (argument mismatch; DataModel cannot be converted to boolean) 
    method Intent.putExtra(String,byte) is not applicable 
    (argument mismatch; DataModel cannot be converted to byte) 
    method Intent.putExtra(String,char) is not applicable 
    (argument mismatch; DataModel cannot be converted to char) 
    method Intent.putExtra(String,short) is not applicable 
    (argument mismatch; DataModel cannot be converted to short) 
    method Intent.putExtra(String,int) is not applicable 
    (argument mismatch; DataModel cannot be converted to int) 
    method Intent.putExtra(String,long) is not applicable 
    (argument mismatch; DataModel cannot be converted to long) 
    method Intent.putExtra(String,float) is not applicable 
    (argument mismatch; DataModel cannot be converted to float) 
    method Intent.putExtra(String,double) is not applicable 
    (argument mismatch; DataModel cannot be converted to double) 
    method Intent.putExtra(String,String) is not applicable 
    (argument mismatch; DataModel cannot be converted to String) 
    method Intent.putExtra(String,CharSequence) is not applicable 
    (argument mismatch; DataModel cannot be converted to CharSequence) 
    method Intent.putExtra(String,Parcelable) is not applicable 
    (argument mismatch; DataModel cannot be converted to Parcelable) 
    method Intent.putExtra(String,Parcelable[]) is not applicable 
    (argument mismatch; DataModel cannot be converted to Parcelable[]) 
    method Intent.putExtra(String,Serializable) is not applicable 
    (argument mismatch; DataModel cannot be converted to Serializable) 
    method Intent.putExtra(String,boolean[]) is not applicable 
    (argument mismatch; DataModel cannot be converted to boolean[]) 
    method Intent.putExtra(String,double[]) is not applicable 
    (argument mismatch; DataModel cannot be converted to double[]) 
    method Intent.putExtra(String,String[]) is not applicable 
    (argument mismatch; DataModel cannot be converted to String[]) 
    method Intent.putExtra(String,CharSequence[]) is not applicable 
    (argument mismatch; DataModel cannot be converted to CharSequence[]) 
    method Intent.putExtra(String,Bundle) is not applicable 
    (argument mismatch; DataModel cannot be converted to Bundle) 

回答

0

这将打开一个新的活动。但如何通过点击打开不同的活动不同的cardviews?

@Override 公共无效onItemClick(DataModel的项目){

 Intent intent = new Intent(MainActivity.this, Yojana.class); 
     intent.putExtra("dataitem", String.valueOf(item)); 
     startActivity(intent); 


} 

Yojana.class

公共类由旬延伸AppCompatActivity {

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_yojana); 
    getIntent().getExtras().getString("dataitem"); 

} 
+0

@ deadpool007现在如何开启不同的活动。如何把这个条件,以便我可以开放不同的活动 –

0

这表明敬酒,因为你已经写了下面的代码:

Toast.makeText(getApplicationContext(), item.text + " is clicked", Toast.LENGTH_SHORT).show(); 

insted的,你应该写下面的代码:

Intent intent = new Intent(MainActivity.this, NextActivity.class); 
intent.putExtra("dataitem", item); 
startActivity(intent); 
+0

。 。getIntent()getExtras()的getString( “DataItem的”)。我已经写在另一个活动,但仍然我得到错误 。错误:(56,15)错误:找不到合适的方法putExtra(字符串,数据模型) 方法Intent.putExtra(字符串,布尔)不适用 (参数不匹配;无法将DataModel转换为布尔型) 方法Intent.putExtra(String,byte)不适用 (参数不匹配; DataModel不能转换为字节) –

+0

no使您的Dataitem类PARCELABLE即为您的类实现Parcelable接口因为您正在将整个对象发送给其他活动。并在NextActivity中执行getIntent()。getParcelableExtra(“dataitem”) – Shrikant

+0

仍然收到与上述 –