Java 使用onclick方法以编程方式添加多个CardView
我还是Android新手,每次点击一个按钮,我都想在活动中添加一个Java 使用onclick方法以编程方式添加多个CardView,java,android,xml,android-layout,Java,Android,Xml,Android Layout,我还是Android新手,每次点击一个按钮,我都想在活动中添加一个cardwiew。cardwiew上有文本和背景图像。我已经有了可以添加这个的XML文件,但是因为我希望能够添加多个,所以我不能使用。第一个图像是单击按钮一次时的图像,第二个图像是单击按钮三次时的图像。我已经为TextView设置了onClick,上面写着“单击以添加块”,为cardwiew设置了XML,但是我不能这样做,以便您可以添加它们,并在每个视图中更改TextView中的文本。我似乎也找不到一种方法可以通过编程将onCli
cardwiew
。cardwiew
上有文本和背景图像。我已经有了可以添加这个的XML文件,但是因为我希望能够添加多个,所以我不能使用。第一个图像是单击按钮一次时的图像,第二个图像是单击按钮三次时的图像。我已经为TextView
设置了onClick
,上面写着“单击以添加块”,为cardwiew
设置了XML,但是我不能这样做,以便您可以添加它们,并在每个视图中更改TextView
中的文本。我似乎也找不到一种方法可以通过编程将onClick
侦听器添加到通过编程创建的CardView
。稍后,我还希望能够通过单击按钮删除cardwiew
这是cardwiew
XML文件(在它进入相对布局之前)
我为您创建了一个示例项目
CardView
创建布局。在res/layout中创建card\u base.xml
。在此布局中添加:MainActivity.java中粘贴以下内容:
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
导入androidx.appcompat.app.appcompat活动;
导入androidx.appcompat.widget.LinearLayoutCompat;
导入androidx.cardwiew.widget.cardwiew;
公共类MainActivity扩展了AppCompatActivity
{
private int starter=66;//用于'B'的ASCII代码`
线性布局海外同胞卡;
按钮D;
钮扣;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
卡片=findViewById(R.id.cards);
ButtonAd=findViewById(R.id.butAdd);
ButtonToSth=findViewById(R.id.Butdosh);
ButtonAd.setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
CardView newCard=新的CardView(MainActivity.this);
GetLayoutFlater().充气(R.layout.card_底座,新卡);
TextView t=newCard.findViewById(R.id.textviewClassesBlock1);
字符串电流=Character.toString((char)starter++);
t、 setText(“块”+电流);
newCard.setTag(当前)//
addView(newCard);
}
});
setOnClickListener(newview.OnClickListener())
{
@凌驾
公共void onClick(视图v)
{
查找块和数据集(“B”);
}
});
}
私有void findBlockAndDoSomething(字符串名称)
{
Log.d(“我的标签”,“点击”);
对于(int i=0;i
结果(起动机代码和添加新的CardView):
谢谢,顺便问一下,是否有任何方法可以访问java文件中显示“Block”
CardView
的TextView
?您指的是活动类中的java文件?我是指活动类中的文件?对不起,措辞不正确。@cg algo我编辑了我的答案。我改变了XML和java。不,您可以更改任何卡片视图中的所有内容,只需给出字母,例如B
(如块B
)
<androidx.cardview.widget.CardView
android:id="@+id/cardviewClassesBlock1"
android:layout_width="330dp"
android:layout_height="75dp"
android:layout_marginTop="90dp"
android:layout_centerHorizontal="true"
app:cardCornerRadius="10dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/ic_launcher_background">
<TextView
android:id="@+id/textviewClassesBlock1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="3dp"
android:textSize="22sp"
android:fontFamily="@font/amiko_semibold"
android:textColor="@color/white"
android:text="Block A"/>
<ImageView
android:layout_width="60dp"
android:layout_height="6dp"
android:layout_marginStart="10dp"
android:layout_below="@+id/textviewClassesBlock1"
android:background="@drawable/rounded_corner_edittext" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_marginEnd="5dp"
android:textColor="@color/white"
android:text="P - 0 | T - 0 | A - 0"/>
</RelativeLayout>
</androidx.cardview.widget.CardView>
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cardviewClassesBlock1"
android:layout_width="wrap_content"
android:layout_height="75dp"
android:layout_centerHorizontal="true"
app:cardCornerRadius="10dp"
android:layout_margin="10dp"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/ic_launcher_background"
>
<TextView
android:id="@+id/textviewClassesBlock1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="3dp"
android:text="Block A"
android:textSize="22sp"
/>
<ImageView
android:layout_width="60dp"
android:layout_height="6dp"
android:layout_below="@+id/textviewClassesBlock1"
android:layout_marginStart="10dp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="5dp"
android:text="P - 0 | T - 0 | A - 0"
/>
</RelativeLayout>
</androidx.cardview.widget.CardView>
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"
>
<Button
android:id="@+id/butAdd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add New Card"
/>
<Button
android:id="@+id/butDoSth"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Do something"
/>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/cards"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<include
android:id="@+id/includedLayoutFirst"
layout="@layout/card_base"
/>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.LinearLayoutCompat;
import androidx.cardview.widget.CardView;
public class MainActivity extends AppCompatActivity
{
private int starter = 66; //ASCII code for `B`
LinearLayoutCompat cards;
Button buttonAdd;
Button buttonDoSth;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cards = findViewById(R.id.cards);
buttonAdd = findViewById(R.id.butAdd);
buttonDoSth = findViewById(R.id.butDoSth);
buttonAdd.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
CardView newCard = new CardView(MainActivity.this);
getLayoutInflater().inflate(R.layout.card_base, newCard);
TextView t = newCard.findViewById(R.id.textviewClassesBlock1);
String current = Character.toString((char) starter++);
t.setText("Block " + current);
newCard.setTag(current); //
cards.addView(newCard);
}
});
buttonDoSth.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
findBlockAndDoSomething("B");
}
});
}
private void findBlockAndDoSomething(String name)
{
Log.d("MyTAG", "CLICK");
for (int i = 0; i < cards.getChildCount(); i++)
{
CardView selected = (CardView) cards.getChildAt(i);
if (selected.getTag() != null && selected.getTag().toString().equals(name))
{
// do something. E.g change block name
TextView textViewClassesBlock1 = selected.findViewById(R.id.textviewClassesBlock1);
textViewClassesBlock1.setText("Block XXX");
return;
}
}
}
}