Android 使用按钮将布局添加到listview
我正在使用Android studio开发我的应用程序,每次我按下一个按钮,我都会编写一些代码,将文本添加到listview中,它工作得非常好。代码如下:Android 使用按钮将布局添加到listview,android,android-layout,Android,Android Layout,我正在使用Android studio开发我的应用程序,每次我按下一个按钮,我都会编写一些代码,将文本添加到listview中,它工作得非常好。代码如下: public class MainActivity extends Activity { EditText editText; Button addButton; ListView listView; ArrayList<String> listItems; ArrayAdapter<
public class MainActivity extends Activity {
EditText editText;
Button addButton;
ListView listView;
ArrayList<String> listItems;
ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText);
addButton = (Button) findViewById(R.id.addItem);
listView = (ListView) findViewById(R.id.listView);
listItems = new ArrayList<String>();
listItems.add("First Item - added on Activity Create");
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, listItems);
listView.setAdapter(adapter);
addButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
listItems.add(editText.getText().toString());
adapter.notifyDataSetChanged();
}
});
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position,
long id) {
Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_LONG)
.show();
}
});
}
}
公共类MainActivity扩展活动{
编辑文本编辑文本;
按钮添加按钮;
列表视图列表视图;
ArrayList列表项;
阵列适配器;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText=(editText)findViewById(R.id.editText);
addButton=(按钮)findViewById(R.id.addItem);
listView=(listView)findViewById(R.id.listView);
listItems=new ArrayList();
添加(“第一项-在创建活动时添加”);
适配器=新阵列适配器(此,
android.R.layout.simple_list_item_1,listItems);
setAdapter(适配器);
addButton.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
添加(editText.getText().toString());
adapter.notifyDataSetChanged();
}
});
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共视图单击(适配器视图a、视图v、内部位置、,
长id){
Toast.makeText(MainActivity.this,“单击”,Toast.LENGTH\u LONG)
.show();
}
});
}
}
现在我想要用一个按钮将布局添加到listview的代码,我尝试了,但失败了,我该怎么做?我在这里编写了一个非常基本的示例,假设布局(行)您想添加到您的
列表视图中
有两个文本视图
s,因为我不知道您想在行中添加什么类型的对象/数据。首先,在layouts文件夹中定义布局。此布局表示要插入到列表视图中的行:
my_row.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- add images or whatever content you want to your row -->
<TextView
android:id="@+id/my_text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:layout_below="@id/my_text1"
android:id="@+id/my_text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
现在,您需要为您的项目创建一个自定义适配器,而不是使用一个简单的字符串数组适配器,在本例中,是要添加到列表视图中的不同行。例如:
public class MyCustomAdapter extends ArrayAdapter<MyRowItem> implements View.OnClickListener
{
private ArrayList<MyRowItem> rowItems;
private static class ViewHolder
{
TextView text1;
TextView text2;
}
public MyCustomAdapter(ArrayList<MyRowItems> items, Context context)
{
super(context, R.layout.my_row, rowItems);
this.rowItems = rowItems;
}
@Override
public void onClick(View v)
{
Toast.makeText(v.getContext(), "Clicked", Toast.LENGTH_LONG).show();
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
MyRowItem rowItem = getItem(position);
ViewHolder viewHolder;
final View result;
if (convertView == null)
{
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(R.layout.my_row, parent, false);
viewHolder.text1 = (TextView) convertView.findViewById(R.id.my_text1);
viewHolder.text2 = (TextView) convertView.findViewById(R.id.my_text2);
convertView.setTag(viewHolder);
}
else
viewHolder = (ViewHolder)convertView.getTag();
viewHolder.text1.setText(rowItem.getText1());
viewHolder.text2.setText(rowItem.getText1());
return convertView;
}
}
我知道这个例子有点基础,但希望它能帮助你入门。你想添加哪种类型的布局,以及它的用途是什么?Relative layout,重要吗?为什么?我不知道我做错了什么,但是我在自定义适配器中的一些事情上出错:public CustomAdapter(ArrayList items,Context Context){super(Context,R.layout.my_row,rowItems);this.rowItems=rowItems;}Customadapter是error,MyRowItem是error,rowItems是error+v.getcontext是error/我做错了什么?你能把鼠标悬停在错误上,看看错误是怎么说的吗?可能是您需要另一个构造函数。在CustomAdapter上,错误为无效的方法Declaration,需要返回类型。在MyRowItems上,错误为无法解析符号。在rowItems上,错误是在调用超类型构造函数之前无法引用mycustomadapter.rowItems。对不起,我的错误,我犯了一些印刷错误。构造函数的名称应为public MyCustomAdapter(ArrayList项,上下文)
。我已经编辑了我的答案。(最初,我写了publiccustomadapter(arraylistitems,Context-Context)
v.getContext
应该是v.getContext()
。很抱歉输入错误。我已经更正了我的答案。
public class MyCustomAdapter extends ArrayAdapter<MyRowItem> implements View.OnClickListener
{
private ArrayList<MyRowItem> rowItems;
private static class ViewHolder
{
TextView text1;
TextView text2;
}
public MyCustomAdapter(ArrayList<MyRowItems> items, Context context)
{
super(context, R.layout.my_row, rowItems);
this.rowItems = rowItems;
}
@Override
public void onClick(View v)
{
Toast.makeText(v.getContext(), "Clicked", Toast.LENGTH_LONG).show();
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
MyRowItem rowItem = getItem(position);
ViewHolder viewHolder;
final View result;
if (convertView == null)
{
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(R.layout.my_row, parent, false);
viewHolder.text1 = (TextView) convertView.findViewById(R.id.my_text1);
viewHolder.text2 = (TextView) convertView.findViewById(R.id.my_text2);
convertView.setTag(viewHolder);
}
else
viewHolder = (ViewHolder)convertView.getTag();
viewHolder.text1.setText(rowItem.getText1());
viewHolder.text2.setText(rowItem.getText1());
return convertView;
}
}
addButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
listItems.add(new MyRowItem("new item", editText.getText().toString());
adapter.notifyDataSetChanged();
}
});