Java Android自定义ListView不工作
我正在创建一个Android应用程序,其中第二个活动显示2个列表视图,定制为每行显示一个图像、两个标签和一个按钮。这是一个游戏,它显示了在发送和接收中分离的持续挑战。 我已经阅读了一些教程,它们都告诉我创建一个XML文件来设计行,一个挑战类,另一个用于阵列适配器,最后将其应用到onCreate on my activity上。 但是,在调试项目时,当访问包含两个ListView的活动时,应用程序会崩溃。这是我的代码,有一点是西班牙语的,希望你不介意: 挑战类(Partida.java): 用于挑战的特殊阵列适配器类(PartidasAdap.java):Java Android自定义ListView不工作,java,android,class,android-listview,android-arrayadapter,Java,Android,Class,Android Listview,Android Arrayadapter,我正在创建一个Android应用程序,其中第二个活动显示2个列表视图,定制为每行显示一个图像、两个标签和一个按钮。这是一个游戏,它显示了在发送和接收中分离的持续挑战。 我已经阅读了一些教程,它们都告诉我创建一个XML文件来设计行,一个挑战类,另一个用于阵列适配器,最后将其应用到onCreate on my activity上。 但是,在调试项目时,当访问包含两个ListView的活动时,应用程序会崩溃。这是我的代码,有一点是西班牙语的,希望你不介意: 挑战类(Partida.java): 用于挑
package com.example.tuneit;
导入java.util.List;
导入android.content.Context;
导入android.graphics.drawable.drawable;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageView;
导入android.widget.RelativeLayout;
导入android.widget.TextView;
公共类PartidasAdap扩展了ArrayAdapter{
私有int资源;
私人充气机;
私人语境;
公共PartidasAdap(上下文ctx、int-resourceId、列表对象){
超级(ctx、资源ID、对象);
资源=资源ID;
充气机=从(ctx)开始的充气机;
this.context=ctx;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
convertView=(RelativeLayout)充气器。充气(资源,空);
Partida P=getItem(位置);
TextView PlayerName=(TextView)convertView.findViewById(R.id.PlayerName);
PlayerName.setText(P.getPartner());
TextView fecha=(TextView)convertView.findViewById(R.id.fecha);
fecha.setText(P.getDate());
ImageView im慷慨=(ImageView)convertView.findViewById(R.id.genreIma);
字符串uri=“drawable/”+P.getgreen();
int-imageResource=context.getResources().getIdentifier(uri,null,context.getPackageName());
Drawable image=context.getResources().getDrawable(imageResource);
imgrano.setImageDrawable(图像);
返回视图;
}
}
显示列表视图的活动(menu.java)。忽略不相关的代码:
package com.example.tuneit;
import java.util.ArrayList;
import java.util.List;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
import android.widget.Button;
import android.content.Context;
import android.content.Intent;
import android.app.*;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageButton;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class menu extends ActionBarActivity {
private Context ctx;
private ListView rec;
private ListView env;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menu);
rec = (ListView) findViewById(R.id.list);
env = (ListView) findViewById(R.id.list2);
ctx=this;
gotoReceived(findViewById(R.id.list));
ActionBar ab = getSupportActionBar();
ab.hide();
List<Partida> recibidas = new ArrayList<Partida>();
List<Partida> enviadas = new ArrayList<Partida>();
recibidas.add(new Partida("exampleUser", "rec", "Feliz cumpleaños", "13-5-2002", "other"));
enviadas.add(new Partida("exapleuser", "env", "Feliz cumpleaños", "13-5-2007", "other"));
rec.setAdapter( new PartidasAdap(ctx, R.layout.rows, recibidas) );
env.setAdapter( new PartidasAdap(ctx, R.layout.rows, enviadas) );
}
package com.example.tuneit;
导入java.util.ArrayList;
导入java.util.List;
导入android.support.v7.app.ActionBarActivity;
导入android.support.v7.app.ActionBar;
导入android.support.v4.app.Fragment;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.ViewGroup;
导入android.os.Build;
导入android.widget.Button;
导入android.content.Context;
导入android.content.Intent;
导入android.app.*;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ImageButton;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
公共类菜单扩展了ActionBarActivity{
私有上下文ctx;
私有列表视图记录;
私有列表视图环境;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.menu);
rec=(ListView)findViewById(R.id.list);
env=(ListView)findViewById(R.id.list2);
ctx=这个;
gotoReceived(findViewById(R.id.list));
ActionBar ab=getSupportActionBar();
ab.隐藏();
List recibidas=new ArrayList();
List enviadas=new ArrayList();
增加(新的党派(“exampleUser”、“rec”、“Feliz Cummersños”、“13-5-2002”、“其他”);
新增(新一方(“exapleuser”、“env”、“Feliz Cummaños”、“13-5-2007”、“其他”);
rec.setAdapter(新PartidasAdap(ctx,R.layout.rows,recibidas));
环境设置适配器(新的PartidasAdap(ctx,R.layout.rows,enviadas));
}
当我在menu.java中将每一行标记为注释时,应用程序并没有崩溃,除了在menu.java中自行生成的注释,但是自定义的ListView也没有显示出来,所以问题显然存在。
我怀疑这与PartidasAdap类中的getView方法从未被调用有关,但我在几个教程中检查了这一点,他们都没有使用它,所以我尊重这一点。
任何帮助都将不胜感激,提前感谢
编辑:几周后,我修复了我的电脑,可以调试你的建议,但它们不起作用。但是,我现在在pastebin中有错误日志,请参见创建一个单独的xml文件作为列表的一行,并在getView中编写代码,如下所示 LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务)
convertView=充气机。充气(R.layout.your_row_for_items,parent,false);我认为问题出在充气机上,使用以下方法:
LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(R.layout.rows, parent, false);
不需要强制转换视图。我会用这种方式编写适配器类。我不确定您的方式是否正确,但这种方式对我来说效果很好
public class PartidasAdap extends ArrayAdapter<Partida>{
private int resource;
private LayoutInflater inflater;
private Context context;
List<Partida> objects;
public PartidasAdap(Context ctx, int resourceId,List<Partida> objects) {
super(ctx, resourceId, objects);
resource = resourceId;
inflater = LayoutInflater.from( ctx );
this.context=ctx;
this.objects=objects;
}
public View getView ( int position, View convertView, ViewGroup parent ) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.your_row_for_items, parent,false);
Partida P = objects.get(position);
TextView PlayerName = (TextView) convertView.findViewById(R.id.PlayerName);
PlayerName.setText(P.getPartner());
TextView fecha = (TextView) convertView.findViewById(R.id.fecha);
fecha.setText(P.getDate());
ImageView imgenero = (ImageView) convertView.findViewById(R.id.genreIma);
String uri = "drawable/" + P.getGenre();
int imageResource = context.getResources().getIdentifier(uri, null, context.getPackageName());
Drawable image = context.getResources().getDrawable(imageResource);
imgenero.setImageDrawable(image);
return convertView;
}
}
公共类PartidasAdap扩展了ArrayAdapter{
私有int资源;
私人充气机;
私人语境;
列出对象;
公共PartidasAdap(上下文ctx、int-resourceId、列表对象){
超级(ctx、资源ID、对象);
资源=资源ID;
充气机=从(ctx)开始的充气机;
this.context=ctx;
这个。对象=对象;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器
LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(R.layout.rows, parent, false);
public class PartidasAdap extends ArrayAdapter<Partida>{
private int resource;
private LayoutInflater inflater;
private Context context;
List<Partida> objects;
public PartidasAdap(Context ctx, int resourceId,List<Partida> objects) {
super(ctx, resourceId, objects);
resource = resourceId;
inflater = LayoutInflater.from( ctx );
this.context=ctx;
this.objects=objects;
}
public View getView ( int position, View convertView, ViewGroup parent ) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.your_row_for_items, parent,false);
Partida P = objects.get(position);
TextView PlayerName = (TextView) convertView.findViewById(R.id.PlayerName);
PlayerName.setText(P.getPartner());
TextView fecha = (TextView) convertView.findViewById(R.id.fecha);
fecha.setText(P.getDate());
ImageView imgenero = (ImageView) convertView.findViewById(R.id.genreIma);
String uri = "drawable/" + P.getGenre();
int imageResource = context.getResources().getIdentifier(uri, null, context.getPackageName());
Drawable image = context.getResources().getDrawable(imageResource);
imgenero.setImageDrawable(image);
return convertView;
}
}