0

私は単純な方法でデータを取得して表示する方法を知っていますが、RecyclerViewについては考えません。OnItemClickはrecyclerViewでデータを取得してアクティビティを開始し、データを表示します

私はちょうど次の活動と表示にそれを渡す特定の項目名と画像を取るしたいと思います。

何私が行っていることである。

1)MainActivity:

public class MainActivity extends AppCompatActivity { 

    private static RecyclerView.Adapter adapter; 
    private RecyclerView.LayoutManager layoutManager; 
    private static RecyclerView recyclerView; 
    private static ArrayList<DataModel> data; 
    static View.OnClickListener myOnClickListener; 
    private static ArrayList<Integer> removedItems; 

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

     myOnClickListener = new MyOnClickListener(this); 


     recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 
     recyclerView.setHasFixedSize(true); 

     layoutManager = new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(layoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 

     data = new ArrayList<DataModel>(); 
     for (int i = 0; i < MyData.nameArray.length; i++) { 
      data.add(new DataModel(
        MyData.nameArray[i], 
        MyData.versionArray[i], 
        MyData.id_[i], 
        MyData.drawableArray[i] 
      )); 
     } 

     removedItems = new ArrayList<Integer>(); 

     adapter = new CustomAdapter(data); 
     recyclerView.setAdapter(adapter); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     super.onOptionsItemSelected(item); 
     if (item.getItemId() == R.id.add_item) { 
      //check if any items to add 
      if (removedItems.size() != 0) { 
       addRemovedItemToList(); 
      } else { 
       Toast.makeText(this, "Nothing to add", Toast.LENGTH_SHORT).show(); 
      } 
     } 
     return true; 
    } 

    private static class MyOnClickListener implements View.OnClickListener { 

     private final Context context; 

     private MyOnClickListener(Context context) { 
      this.context = context; 
     } 

     @Override 
     public void onClick(View v) { 
      removeItem(v); 
      onItemClick(v); 
     } 

     private void onItemClick(View v) { 
      int selectedItemPosition = recyclerView.getChildPosition(v); 
      RecyclerView.ViewHolder viewHolder 
        = recyclerView.findViewHolderForPosition(selectedItemPosition); 
      TextView textViewName 
        = (TextView) viewHolder.itemView.findViewById(R.id.textViewName); 
      ImageView image 
        = (ImageView) viewHolder.itemView.findViewById(R.id.imageView); 
      String selectedName = (String) textViewName.getText(); 

      int selectedItemId = -1; 
      for (int i = 0; i < MyData.nameArray.length; i++) { 
       if (selectedName.equals(MyData.nameArray[i])) { 
        selectedItemId = MyData.id_[i]; 
       } 
      } 

     } 

     private void removeItem(View v) { 
      int selectedItemPosition = recyclerView.getChildPosition(v); 
      RecyclerView.ViewHolder viewHolder 
        = recyclerView.findViewHolderForPosition(selectedItemPosition); 
      TextView textViewName 
        = (TextView) viewHolder.itemView.findViewById(R.id.textViewName); 
      String selectedName = (String) textViewName.getText(); 
      int selectedItemId = -1; 
      for (int i = 0; i < MyData.nameArray.length; i++) { 
       if (selectedName.equals(MyData.nameArray[i])) { 
        selectedItemId = MyData.id_[i]; 
       } 
      } 
      removedItems.add(selectedItemId); 
      data.remove(selectedItemPosition); 
      adapter.notifyItemRemoved(selectedItemPosition); 
     } 
    } 

    private void addRemovedItemToList() { 
     int addItemAtListPosition = 3; 
     data.add(addItemAtListPosition, new DataModel(
       MyData.nameArray[removedItems.get(0)], 
       MyData.versionArray[removedItems.get(0)], 
       MyData.id_[removedItems.get(0)], 
       MyData.drawableArray[removedItems.get(0)] 
     )); 
     adapter.notifyItemInserted(addItemAtListPosition); 
     removedItems.remove(0); 
    } 




} 

2)のDataModel:

public class DataModel { 


    String name; 
    String version; 
    int id_; 
    int image; 

    public DataModel(String name, String version, int id_, int image) { 
     this.name = name; 
     this.version = version; 
     this.id_ = id_; 
     this.image=image; 
    } 


    public String getName() { 
     return name; 
    } 


    public String getVersion() { 
     return version; 
    } 

    public int getImage() { 
     return image; 
    } 

    public int getId() { 
     return id_; 
    } 
} 

3)アダプタ:

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> { 

    private ArrayList<DataModel> dataSet; 

    public static class MyViewHolder extends RecyclerView.ViewHolder { 

     TextView textViewName; 
     TextView textViewVersion; 
     ImageView imageViewIcon; 

     public MyViewHolder(View itemView) { 
      super(itemView); 
      this.textViewName = (TextView) itemView.findViewById(R.id.textViewName); 
      this.textViewVersion = (TextView) itemView.findViewById(R.id.textViewVersion); 
      this.imageViewIcon = (ImageView) itemView.findViewById(R.id.imageView); 
     } 
    } 

    public CustomAdapter(ArrayList<DataModel> data) { 
     this.dataSet = data; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, 
              int viewType) { 
     View view = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.cards_layout, parent, false); 

     view.setOnClickListener(MainActivity.myOnClickListener); 

     MyViewHolder myViewHolder = new MyViewHolder(view); 
     return myViewHolder; 
    } 

    @Override 
    public void onBindViewHolder(final MyViewHolder holder, final int listPosition) { 

     TextView textViewName = holder.textViewName; 
     TextView textViewVersion = holder.textViewVersion; 
     ImageView imageView = holder.imageViewIcon; 

     textViewName.setText(dataSet.get(listPosition).getName()); 
     textViewVersion.setText(dataSet.get(listPosition).getVersion()); 
     imageView.setImageResource(dataSet.get(listPosition).getImage()); 


    } 

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

答えて

1

あなた Adapter
public abstract class BaseViewHolder extends RecyclerView.ViewHolder { 


public BaseViewHolder(View itemView) { 
    super(itemView); 
} 

public BaseViewHolder(View itemView, final ViewHolderClickListener listener) { 
    super(itemView); 
    if (listener != null) { 
     itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       listener.onViewHolderClick(view, getAdapterPosition()); 
      } 
     }); 
    } 
} 


public interface ViewHolderClickListener { 
    void onViewHolderClick(View view, int position); 
} 
} 

、あなたのViewHolderからBaseViewHolderextendsする必要があります。次に、あなたはできます:

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(yourLayoutId, parent, false); 
    // your viewHolderClickListener, you can set it in constructor 
    ViewHolder vh = new ViewHolder(v, viewHolderClickListener); 
    return vh; 
} 
0

あなたのMyViewHolderクラスでonClick for itemViewを指定できます。それでもコードが必要な場合は、私に知らせてください。あなたは私のBaseViewHollderを使用することができます

関連する問題