Java Android:ListView在OnClickListener中不工作
我正在尝试创建一个Java Android:ListView在OnClickListener中不工作,java,android,xml,Java,Android,Xml,我正在尝试创建一个列表视图,其中包含一个用于列出应用程序的复选框 我已经正确地编码了复选框,因此我正在尝试在列表视图中显示复选框 XML <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools
列表视图
,其中包含一个用于列出应用程序的复选框
我已经正确地编码了复选框
,因此我正在尝试在列表视图中显示复选框
XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rootContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<ListView
android:id="@+id/taskListView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
<EditText
android:id="@+id/new_task"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="New Task"
android:inputType="textCapSentences" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Create" />
</LinearLayout>
爪哇
public类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button Button=(Button)findViewById(R.id.Button);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
ListView ListView=findViewById(R.id.taskListView);
EditText newTask=findviewbyd(R.id.new_任务);
复选框=新复选框(MainActivity.this);
String task=newTask.getText().toString();
newTask.setText(任务);
checkBox.setText(任务);
ListAdapter myListAdapter=new ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,任务);
ListView taskListView=(ListView)findViewById(R.id.taskListView);
setAdapter(myListAdapter);
}
});
}
}
我已经为ListView
编写了Java代码,但出现以下错误:
无法解析构造函数“ArrayAdapter(匿名android.view.view.OnClickListener,int,java.lang.String)”
问题是您正在将clicklistner传递给适配器,但适配器需要上下文
首先,创建上下文对象并将活动传递给该上下文
在AppCompative活动中添加:
private Context context ;
然后在onCreate中初始化此上下文,如:
context = this ;
其次,您需要将列表传递给适配器。所以,创建任务的字符串arraylist并传递给适配器
ArrayList<String> list = new ArrayList<>() ;
list.add(task) ;
ArrayList list=new ArrayList();
列表。添加(任务);
现在将此上下文和列表传递给arrayadapter:
myListAdapter = new ArrayAdapter<String>(context,android.R.layout.simple_list_item_1,list);
myListAdapter=新的ArrayAdapter(上下文,android.R.layout.simple\u list\u item\u 1,list);
您必须使用自定义ListView适配器,在一个布局中显示复选框和文本。如果只想显示不带复选框的文本,可以使用如下方式:
public类MainActivity扩展了AppCompatActivity{
列出任务;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tasks=newarraylist();
Button Button=(Button)findViewById(R.id.Button);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
ListView ListView=findViewById(R.id.taskListView);
EditText newTask=findviewbyd(R.id.new_任务);
String task=newTask.getText().toString();
任务。添加(任务);
ListAdapter myListAdapter=new ArrayAdapter(这是android.R.layout.simple_list_item_1,tasks.toArray(新字符串[0]);
ListView taskListView=(ListView)findViewById(R.id.taskListView);
setAdapter(myListAdapter);
}
});
}
}
有了复选框,情况就复杂多了:必须定义自定义布局和自定义阵列适配器
阵列适配器如下所示:
公共类MyListAdapter扩展了ArrayAdapter{
私人最终活动背景;
私有最终字符串[]任务;
完成私人决赛;
公共MyListAdapter(活动上下文,字符串[]任务,布尔[]已完成){
super(上下文,R.layout.mylist,主标题);
//TODO自动生成的构造函数存根
this.context=context;
这个。任务=任务;
这个。完成=完成;
}
公共视图getView(int位置、视图视图、视图组父级){
LayoutInflater充气器=上下文。getLayoutInflater();
视图行视图=充气机。充气(R.layout.mylist,null,true);
Checkbox check=(Checkbox)rowView.findviewbyd(R.id.Checkbox);
TextView任务=(TextView)rowView.findViewById(R.id.task);
检查。设置检查(已完成[位置]);
task.setText(任务[位置]);
返回行视图;
}
}
自定义布局为mylist.xml
,如下所示:
然后您必须将主类更改为:
public类MainActivity扩展了AppCompatActivity{
列出任务;
已完成的清单;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tasks=newarraylist();
Button Button=(Button)findViewById(R.id.Button);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
ListView ListView=findViewById(R.id.taskListView);
EditText newTask=findviewbyd(R.id.new_任务);
String task=newTask.getText().toString();
任务。添加(任务);
已完成。添加(假);
MyListAdapter MyListAdapter=新的MyListAdapter(这是tasks.toArray(新字符串[0]),completed.toString(新布尔值[0]);
ListView taskListView=(ListView)findViewById(R.id.taskListView);
setAdapter(myListAdapter);
}
});
}
}
编辑:
如果您只想使用Java代码创建条目,则可以将自定义适配器中的getView方法替换为以下方法:
public View getView(int位置、视图视图、视图组父视图){
LinearLayout行视图=新的LinearLayout(上下文);
复选框check=新复选框(上下文);
TextView任务=新的TextView(上下文);
检查。设置检查(已完成[位置]);
助教
myListAdapter = new ArrayAdapter<String>(context,android.R.layout.simple_list_item_1,list);