在使用recyclerView填充的cardView中添加单击Listener for按钮

时间:2015-02-07 06:27:07

标签: android ontouchlistener onitemclicklistener android-recyclerview android-cardview

我有一张cardView

card_contents.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<android.support.v7.widget.CardView android:layout_width="match_parent"
    android:layout_height="150dp"
    android:layout_marginTop="10dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:id="@+id/card_view">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffa3a4a6">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/card_text"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="B.E"
        android:layout_centerInParent="true"
        />
     <Button
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentBottom="true"
         android:id="@+id/button1"
         android:layout_toLeftOf="@+id/view"
         android:layout_alignParentLeft="true"
         android:text="2010"
         android:textColor="#000000"
         android:background="@android:color/transparent"
         />
       <View
           android:layout_width="2dp"
           android:layout_height="@dimen/abc_action_button_min_height_material"
           android:layout_centerHorizontal="true"
           android:id="@+id/view"
           android:background="@android:color/black"
           android:layout_alignParentBottom="true"
           />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/button2"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_toRightOf="@+id/view"
            android:background="@android:color/transparent"
            android:textColor="@android:color/black"
            android:text="2014"/>
    </RelativeLayout>
    </android.support.v7.widget.CardView>
   </RelativeLayout>

MainActivity.class

public class MainActivity extends ActionBarActivity {

RecyclerView recyclerView;

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



    List<String> list=new ArrayList<String>();
    list.add("Hello");
    list.add("Hello World");
    list.add("Hello World Beings");

    recyclerView=(RecyclerView)findViewById(R.id.recycler_view);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setHasFixedSize(true);

    RecyclerView.LayoutManager layoutManager=new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);

    RecyclerView.Adapter adapter=new MyAdapter(list);
    recyclerView.setAdapter(adapter);




}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}

MyAdapter.class

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
List<String> list;
public MyAdapter(List<String> list){
    this.list=list;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_contents,viewGroup,false);
    return new MyViewHolder(v);
}

@Override
public void onBindViewHolder(MyViewHolder myViewHolder, int i) {
        myViewHolder.textView.setText(list.get(i));
}

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

public static class MyViewHolder extends RecyclerView.ViewHolder{
    TextView textView;
    MyViewHolder(View view){
        super(view);
        this.textView= (TextView) view.findViewById(R.id.card_text);
    }
}
}

我实际上想要为卡内的按钮设置点击监听器,并根据按下哪个按钮以及按下哪个卡来启动新活动。有没有办法实现这个目标?我已经环顾四周,但确实没有找到任何答案,为cardView中的项目设置点击监听器。我是Android的新手,任何帮助将不胜感激。提前致谢

4 个答案:

答案 0 :(得分:36)

  

在使用a填充的cardView中添加按钮的单击侦听器   recyclerView

将点击事件添加到RecyclerView中的按钮:

1。从xml获取Button的方式与在TextView类中MyViewHolder的方式相同:

public static class MyViewHolder extends RecyclerView.ViewHolder{
    TextView textView;
    Button btnButton1;
    MyViewHolder(View view){
        super(view);
        this.textView= (TextView) view.findViewById(R.id.card_text);
        this.btnButton1= (Button) view.findViewById(R.id.button1);
        ... do same for other Button
    }
}

2。setOnClickListener方法中为Button添加onBindViewHolder方法:

@Override
public void onBindViewHolder(MyViewHolder myViewHolder, int i){
     myViewHolder.textView.setText(list.get(i));
      myViewHolder.btnButton1.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            /// button click event
        }
    });
}

答案 1 :(得分:2)

在CustomAdapter中的onBindViewHolder方法上定义onClick侦听器。

答案 2 :(得分:1)

我们说你有:

<android.support.v7.widget.CardView
    android:id="@+id/cv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="4dp"
    android:elevation="4dp"
    app:cardCornerRadius="2dp">

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="16dp">

        <TextView
            android:id="@+id/listText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:padding="8dp"
            android:text="New Text" />

        <ImageButton
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/listText"
            android:layout_alignParentRight="true"
            android:onClick="onClickBotonBorrar"
            android:background="?android:selectableItemBackground"
            android:src="@drawable/ic_action_borrar" />
    </RelativeLayout>

</android.support.v7.widget.CardView>

注意这部分:android:onClick="onClickBotonBorrar"

在您的活动中添加以下内容:

public void onClickBotonBorrar (View v) {
//Do whatever you want when user clicks on your ImageButton
    }

建议不要在适配器内部使用click事件,而是在活动中使用。

注意:按钮

类似

答案 3 :(得分:0)

另一种方法是使用接口

1)创建一个界面

public class Main extends Configured implements Tool {


    @Override
    public int run(String[] args) throws Exception {

        Job job = Job.getInstance(getConf());
        job.setJobName("WordCount");
        job.setJarByClass(Main.class);

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        job.setMapperClass(Map.class);
        job.setReducerClass(Reduce.class);

        Path inputFilePath = new Path("/Users/francesco/input/input.txt");
        Path outputFilePath = new Path("/Users/francesco/output/first");

        FileInputFormat.addInputPath(job, inputFilePath);
        FileOutputFormat.setOutputPath(job, outputFilePath);

        return job.waitForCompletion(true) ? 0 : 1;
    }

    public static void main(String[] args) throws Exception{
        int exitCode = ToolRunner.run(new Main(), args);
        System.exit(exitCode);
    }
}

2)在“活动”中实现界面

public interface ItemClickListener{

   public void startSecondActivity(position)(int index);

   public void startThirdActivity(position)(int index);

}

3)在RecyclerViewAdapter中使用ItemListener

public class MainActivity extends AppcompatActivity implements ItemClickListener {

   .........

   public void startSecondActivity(position)(int index){

            Intent i = new Intent(MainActivity.this, SecondActivity.class);
            startActivity(i);

   }

   public void startThirdActivity(position)(int index){

            Intent i = new Intent(MainActivity.this, ThirdActivity.class);
            startActivity(i);
   }


}