私有类

时间:2018-02-01 13:40:58

标签: java android android-intent

我正在尝试使用intent调用另一个类。但它没有用。我正在使用android studio来实现这个项目。

应用程序应显示一个屏幕,其中包含亚马逊,谷歌,推特,脸书等流行品牌的徽标。点击徽标时,通过调用AnotherActivity.java显示另一个屏幕(活动)

下面是似乎包含问题的类:

package com.aquino.gridlayoutmanagerrecyclerview;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
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;

public class ActivityMain extends AppCompatActivity {

    RecyclerView rvMain;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rvMain = (RecyclerView) findViewById(R.id.rvMain);
        Bitmap[] logos = new Bitmap[12];
        logos[0] = BitmapFactory.decodeResource(getResources(), 
R.drawable.medida2);
    logos[1] = BitmapFactory.decodeResource(getResources(), R.drawable.logo_fb);
    logos[2] = BitmapFactory.decodeResource(getResources(), R.drawable.logo_google);
    logos[3] = BitmapFactory.decodeResource(getResources(), R.drawable.logo_insta);
    logos[4] = BitmapFactory.decodeResource(getResources(), R.drawable.logo_linkedin);
    logos[5] = BitmapFactory.decodeResource(getResources(), R.drawable.logo_microsoft);
    logos[6] = BitmapFactory.decodeResource(getResources(), R.drawable.logo_myspace);
    logos[7] = BitmapFactory.decodeResource(getResources(), R.drawable.logo_skype);
    logos[8] = BitmapFactory.decodeResource(getResources(), R.drawable.logo_snapchat);
    logos[9] = BitmapFactory.decodeResource(getResources(), R.drawable.logo_twitter);
    logos[10] = BitmapFactory.decodeResource(getResources(), R.drawable.logo_viber);
    logos[11] = BitmapFactory.decodeResource(getResources(), R.drawable.logo_whatsapp);
    MyAdapter adapter = new MyAdapter(getResources().getStringArray(R.array.company_list), logos);
    rvMain.setLayoutManager(new GridLayoutManager(ActivityMain.this, 2));
    rvMain.setAdapter(adapter);
}//end of onCreate()

private class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {

    String[] companyList;
    Bitmap[] logoList;

    public MyAdapter(String[] companyList, Bitmap[] logoList) {
        this.companyList = companyList;
        this.logoList = logoList;
    }


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

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {
        holder.logo.setImageBitmap(logoList[position]);
        holder.logo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(this, AnotherActivity.class);
                startActivity(intent);
            }
        });
        holder.name.setText(companyList[position]);
    }

    @Override
    public int getItemCount() {
        return companyList.length;
    }

}//end of MyAdapter
private class MyViewHolder extends RecyclerView.ViewHolder{

    public ImageView logo;
    public TextView name;

    public MyViewHolder(View itemView) {
        super(itemView);
        logo = (ImageView)itemView.findViewById(R.id.ivLogo);
        name = (TextView)itemView.findViewById(R.id.tvCompany);
    }
 }//end of MyViewHolder
}

我无法弄清楚为什么不在私有类MyAdapter中添加意图。

欢迎任何帮助

2 个答案:

答案 0 :(得分:0)

我不确定你得到了什么错误。

在recyclerview中实现onclick的好方法是创建一个接口。

在activity中实现接口,在activity中实现的接口方法中创建intent,并在recyclelerview中调用它

或使用此:

Defining a RecyclerView's onCLickListener in an Activity

答案 1 :(得分:0)

根据您的代码,一切都很好。但是在私有适配器中,你不会直接通过&#34;这个&#34;来获得类的上下文。所以只需替换代码。

 Intent intent = new Intent(ActivityMain.this, AnotherActivity.class);
 startActivity(intent);