2016-10-14 3 views
0

これは私のMainActivity Codeです。これはnullポインタ例外としてsetOnItemClickListenerにエラーが発生し、私のapp.giveの私の提案が間違っています。私はそれの上にトップとタイトルの画像でカスタムグリッドを達成しようとしています。リクリスタグリッドレイアウトでエラーが発生しました

public class MainActivity extends AppCompatActivity { 

//RecyclerView recyclerView; 
private static final String TAG = "MainActivity"; 

    private final String android_version_names[] = { 
      "Donut", 
      "Eclair", 
      "Froyo", 
      "Gingerbread", 
      "Honeycomb", 
      "Ice Cream Sandwich", 
      "Jelly Bean", 
      "KitKat", 
      "Lollipop", 
      "Marshmallow" 
    }; 

    private final String android_image_urls[] = { 
      "https://api.learn2crack.com/android/images/donut.png", 
      "https://api.learn2crack.com/android/images/eclair.png", 
      "https://api.learn2crack.com/android/images/froyo.png", 
      "https://api.learn2crack.com/android/images/ginger.png", 
      "https://api.learn2crack.com/android/images/honey.png", 
      "https://api.learn2crack.com/android/images/icecream.png", 
      "https://api.learn2crack.com/android/images/jellybean.png", 
      "https://api.learn2crack.com/android/images/kitkat.png", 
      "https://api.learn2crack.com/android/images/lollipop.png", 
      "https://api.learn2crack.com/android/images/marshmallow.png" 
    }; 

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


    initViews(); 


} 

private void initViews(){ 
    RecyclerView recyclerView = (RecyclerView)findViewById(R.id.card_recycler_view); 
    recyclerView.setHasFixedSize(true); 
    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),2); 
    recyclerView.setLayoutManager(layoutManager); 

    ArrayList<AndroidVersion> androidVersions = prepareData(); 
    DataAdapter adapter = new DataAdapter(getApplicationContext(),androidVersions); 
    recyclerView.setAdapter(adapter); 

    DataAdapter mAdapter = null ; 

    mAdapter.setOnItemClickListener(new DataAdapter.ClickListener() { 
     @Override 
     public void onItemClick(int position, View v) { 

      Log.d(TAG, "onItemClick position: " + position); 
     } 

    }); 


} 
private ArrayList<AndroidVersion> prepareData(){ 

    ArrayList<AndroidVersion> android_version = new ArrayList<>(); 
    for(int i=0;i<android_version_names.length;i++){ 
    AndroidVersion androidVersion = new AndroidVersion(); 
    androidVersion.setAndroid_version_name(android_version_names[i]); 
    androidVersion.setAndroid_image_url(android_image_urls[i]); 
    android_version.add(androidVersion); 
    } 
    return android_version; 
    } 

    } 

This is My Adapter Codeです。

あなたが setOnItemClickListenerを設定する前 mAdapter = nullを設定している
public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> { 
private ArrayList<AndroidVersion> android; 
private Context context; 
private static ClickListener clickListener; 

public DataAdapter(Context context,ArrayList<AndroidVersion> android) { 
    this.android = android; 
    this.context = context; 
} 

@Override 
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_layout, viewGroup, false); 
    return new ViewHolder(view); 
} 

@Override 
public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) { 

    viewHolder.tv_android.setText(android.get(i).getAndroid_version_name()); 
    Picasso.with(context).load(android.get(i).getAndroid_image_url()).resize(240, 120).into(viewHolder.img_android); 
} 

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

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
    private TextView tv_android; 
    private ImageView img_android; 
    public ViewHolder(View view) { 
     super(view); 
     view.setOnClickListener(this); 




     tv_android = (TextView)view.findViewById(R.id.tv_android); 
     img_android = (ImageView) view.findViewById(R.id.img_android); 
    } 
    @Override 
    public void onClick(View v) { 
     clickListener.onItemClick(getAdapterPosition(), v); 
    } 
} 
public void setOnItemClickListener(ClickListener clickListener) { 
    DataAdapter.clickListener = clickListener; 
} 

public interface ClickListener { 
    void onItemClick(int position, View v); 

} 

} 

答えて

1

、あなたが間違ったアダプタを呼び出している

DataAdapter mAdapter = null ; //remove this line 

adapter.setOnItemClickListener(new DataAdapter.ClickListener() { 
    @Override 
    public void onItemClick(int position, View v) { 

     Log.d(TAG, "onItemClick position: " + position); 
    } 

}); 

、あなたの実際の変数がadapterであり、あなたはmAdapterでそれを呼び出している、それを削除し、また、その値を設定することにより、 ull

+0

私はmAdapter **を取得していますが、今は解決していません。申し訳ありません私はプロではありません。 –

+1

はい、アダプター名がmAdapter –

+0

thnxではなくアダプターであるため、アプリは現在実行中ですが、エラーなしでシャットダウンをクリックすると –

0

この

DataAdapter adapter = new DataAdapter(getApplicationContext(),androidVersions); 
recyclerView.setAdapter(adapter); 


adapter.setOnItemClickListener(new DataAdapter.ClickListener() { 
    @Override 
    public void onItemClick(int position, View v) { 

     Log.d(TAG, "onItemClick position: " + position); 
    } 

}); 
をお試しください
+0

エラーが発生します。変数アダプターがスコープ内ですでに定義されています。 –

関連する問題