2017-01-27 2 views
1

Я хочу значение TextView Когда я нажимаю на текстовое представление элемента внутри RecyclerView. Я не хочу, чтобы весь элемент Clickable, мне нужен только одно текстовое представление для элемента clickable, который является «countNumber» в следующем коде. когда я нажимаю на него, я хочу получить отображаемые текстовые данные countNumber.получить значение TextView на элемент click внутри просмотра Recycler?

Ресайклер адаптер

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

    ArrayList<UserData> dataSet = new ArrayList<>(); 

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

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


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

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

     holder.heading.setText(dataSet.get(listPosition).getHeading()); 
     holder.description.setText(dataSet.get(listPosition).getDescription()); 
     holder.countNumber.setText(String.valueOf(dataSet.get(listPosition).getCount())); 
     holder.time.setText(dataSet.get(listPosition).getTime()); 
     holder.date.setText(dataSet.get(listPosition).getDate()); 
     holder.place.setText(dataSet.get(listPosition).getPlace()); 


    } 

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

    public void countIncrease() { 

    } 

    public List<UserData> getList() { 
     return this.dataSet; 
    } 

    public static class MyViewHolder extends RecyclerView.ViewHolder { 


     TextView heading; 
     TextView description; 
     TextView countNumber; 
     TextView time; 
     TextView date; 
     TextView place; 

     public MyViewHolder(final View itemView) { 
      super(itemView); 

      this.countNumber = (TextView) itemView.findViewById(R.id.countId); 
      this.heading = (TextView) itemView.findViewById(R.id.textViewName); 
      this.description = (TextView) itemView.findViewById(R.id.textViewVersion); 
      this.place = (TextView) itemView.findViewById(R.id.placeId); 
      this.time = (TextView) itemView.findViewById(R.id.timeId); 
      this.date = (TextView) itemView.findViewById(R.id.dateId); 
      this.countNumber.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
         //i need counterNumber value here 
        Log.v("loo", "Click"); 
       } 
      }); 
     } 
    } 
} 

MainActivity

public class MainActivity extends AppCompatActivity { 

    DBHelper dbHelper; 

    CustomAdapter adapter; 
    private RecyclerView.LayoutManager layoutManager; 
    private static RecyclerView recyclerView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     dbHelper = DBHelper.getInstance(getApplicationContext()); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       addButton(); 
      } 
     }); 



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

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

     adapter = new CustomAdapter(dbHelper.getAllIncidents()); 
     recyclerView.setAdapter(adapter); 

    } 




    public void addButton(){ 
     Intent addButtonIndent = new Intent(this,AddData.class); 
     startActivity(addButtonIndent); 
    } 


} 
+0

Вы можете получить текст внутри OnClick(), используя ((TextView) v) .getText(); –

ответ

3

Если вы хотите получить от внутри-адаптера, так как @ Рамеш-р говорит, вы можете получить его с ((TextView)v).getText();

this.countNumber.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ((TextView)v).getText(); 
      } 
     }); 

Но если вы хотите, чтобы получить значение из Activity вам необходимо создать и реализовать для него интерфейс. Сначала создайте интерфейс в вашем адаптере (код с комментарием):

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

    ArrayList<UserData> dataSet = new ArrayList<>(); 

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

    // Define listener member variable 
    private static OnRecyclerViewItemClickListener mListener; 

    // Define the listener interface 
    public interface OnRecyclerViewItemClickListener { 
    void onItemClicked(String text); 
    } 

    // Define the method that allows the parent activity or fragment to define the listener. 
    public void setOnRecyclerViewItemClickListener(OnRecyclerViewItemClickListener listener) { 
    this.mListener = listener; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, 
             int viewType) { 
    ... 
    } 

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

    ... 
    } 

    ... 

    public static class MyViewHolder extends RecyclerView.ViewHolder { 
    ... 

    public MyViewHolder(final View itemView) { 
     super(itemView); 

     ... 

     this.countNumber.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // send the text to the listener, i.e Activity. 
       mListener.onItemClicked(((TextView)v).getText()); 
      } 
     }); 
    } 
    } 

    ... 
} 

Затем реализовать интерфейс в своей деятельности, чтобы получить текст:

adapter = new CustomAdapter(dbHelper.getAllIncidents()); 

// Interface implementation. 
adapter.setOnRecyclerViewItemClickListener(new YourAdapter.OnRecyclerViewItemClickListener() { 
    @Override 
    public void onItemClicked(String text) { 
    Log.d(TAG, "Text is = " + text); 
    } 
}); 

recyclerView.setAdapter(adapter); 
+0

Ты сделал мой день, большое спасибо !!! –

0

Попробуйте ниже код

this.countNumber.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String value=((TextView)v).getText(); 
       //i need counterNumber value here 
      Log.v("loo", value); 
     } 
    }); 
1

Попробуйте этот код

Сделать countNumber к final

final this.countNumber = (TextView) itemView.findViewById(R.id.countId); 

И получить значение от TextView что countNumber

this.countNumber.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
       //i need counterNumber value here 
      String value = this.countNumber.getText().toString().trim(); 
      Log.v("loo", "countNumber=="+value); 
     } 
    }); 
Смежные вопросы