Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用按钮将布局添加到listview_Android_Android Layout - Fatal编程技术网

Android 使用按钮将布局添加到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<

我正在使用Android studio开发我的应用程序,每次我按下一个按钮,我都会编写一些代码,将文本添加到listview中,它工作得非常好。代码如下:

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();
    }
});