Java 复制的代码中存在错误
我正在看一篇关于Java 复制的代码中存在错误,java,android,Java,Android,我正在看一篇关于列表视图和按钮的文章。现在我复制了他写的代码。但不幸的是,我犯了一个错误 我有一个activity\u main,Child\u listview,ListAdapter.java和MainActivity.java. 在最后一篇文章中,我发现了一个错误。我把错误用粗体字写了出来 错误1说:ListAdapter是抽象的;无法实例化 错误2表示:无法解析方法。我猜这是因为它在错误的javafile中寻找方法。它正在MainActivity中查找它,而不是ListAdapter p
列表视图
和按钮
的文章。现在我复制了他写的代码。但不幸的是,我犯了一个错误
我有一个activity\u main
,Child\u listview
,ListAdapter.java
和MainActivity.java.
在最后一篇文章中,我发现了一个错误。我把错误用粗体字写了出来
错误1说:ListAdapter是抽象的
;无法实例化
错误2表示:无法解析方法。我猜这是因为它在错误的javafile中寻找方法。它正在MainActivity
中查找它,而不是ListAdapter
private ListView listView;
ListAdapter adapter;
ArrayList<String> dataItems = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] dataArray = getResources().getStringArray(R.array.listdata);
List<String> dataTemp = Arrays.asList(dataArray);
dataItems.addAll(dataTemp);
listView = (ListView) findViewById(R.id.listView);
adapter = **new ListAdapter(MainActivity.this, dataItems)**;
adapter.**setCustomButtonListner**(MainActivity.this);
listView.setAdapter(adapter);
私有ListView ListView;
列表适配器;
ArrayList dataItems=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[]dataArray=getResources().getStringArray(R.array.listdata);
List dataTemp=Arrays.asList(dataArray);
dataItems.addAll(dataTemp);
listView=(listView)findViewById(R.id.listView);
适配器=**新的ListAdapter(MainActivity.this,dataItems)**;
适配器。**setCustomButtonListner**(MainActivity.this);
setAdapter(适配器);
如果你继续浏览这篇文章,你会发现他创建了这个ListAdapter(对于自定义适配器来说,这是一个糟糕的名字)
这是他的班级代码
package com.example.articalonlistiner;
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;
public class ListAdapter extends ArrayAdapter<String> {
customButtonListener customListner;
public interface customButtonListener {
public void onButtonClickListner(int position,String value);
}
public void setCustomButtonListner(customButtonListener listener) {
this.customListner = listener;
}
private Context context;
private ArrayList<String> data = new ArrayList<String>();
public ListAdapter(Context context, ArrayList<String> dataItem) {
super(context, R.layout.child_listview, dataItem);
this.data = dataItem;
this.context = context;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
convertView = inflater.inflate(R.layout.child_listview, null);
viewHolder = new ViewHolder();
viewHolder.text = (TextView) convertView
.findViewById(R.id.childTextView);
viewHolder.button = (Button) convertView
.findViewById(R.id.childButton);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
final String temp = getItem(position);
viewHolder.text.setText(temp);
viewHolder.button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (customListner != null) {
customListner.onButtonClickListner(position,temp);
}
}
});
return convertView;
}
public class ViewHolder {
TextView text;
Button button;
}
}
package com.example.articalonlistiner;
导入java.util.ArrayList;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.TextView;
公共类ListAdapter扩展了ArrayAdapter{
customButtonListener CustomListener;
公共接口customButtonListener{
公共void onButtonClickListner(int位置,字符串值);
}
public void setCustomButtonListner(customButtonListener侦听器){
this.customListner=侦听器;
}
私人语境;
private ArrayList data=new ArrayList();
公共ListAdapter(上下文上下文,ArrayList数据项){
super(context,R.layout.child_listview,dataItem);
this.data=数据项;
this.context=上下文;
}
@凌驾
公共视图getView(最终int位置、视图转换视图、视图组父级){
持票人持票人;
如果(convertView==null){
LayoutFlater充气机=LayoutFlater.from(上下文);
convertView=充气机。充气(R.layout.child_listview,null);
viewHolder=新的viewHolder();
viewHolder.text=(TextView)convertView
.findViewById(R.id.childTextView);
viewHolder.button=(按钮)convertView
.findViewById(R.id.childButton);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
最终字符串温度=getItem(位置);
viewHolder.text.setText(临时);
viewHolder.button.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(customListner!=null){
customListner.onButtonClickListner(位置、温度);
}
}
});
返回视图;
}
公共类视图持有者{
文本查看文本;
按钮;
}
}
这显然是你的疏忽。你不能复制一段代码,如果你不阅读所有内容,就希望它能工作
编辑(来自以下评论):
这对于确保您使用正确的ListAdapter也是很重要的。您需要导入自定义的ListAdapter,而不是Android小部件包中的ListAdapter。您能给我们提供源代码的链接吗?您应该放日志,而不是仅仅告诉错误保持阅读……他创建了ListAdapter!!!@Nomad,有no Logcat,因为他没有编译is程序,这清楚地表明您没有阅读我在代码上面的注释。我已经写过,我有ListAdapter.java,但仍然有错误。我非常感谢您的输入。由于ListAdapter显然不是抽象的,这不是同一个文件,或者您只是导入了ListAdandroid.widget.ListAdapter中的apter接口。删除ListAdapter导入以使用正确的ListAdapter(定制)。如果与活动不同,请指定程序包。编辑:是的,我确实读了你的问题,但文件名没有告诉我内容。哈哈,我现在明白了。我真的很感谢你的帮助。我刚刚开始学习java和android,所以我还有很长的路要走。我删除了它,现在它确实可以工作了。非常感谢你。真的吗不用担心Android,这基本上是一个很大的库,如果你懂Java,你就会懂Android。如果你愿意接受这个答案,我已经将它编辑为包含导入部分。