Java Android自定义ListView不工作

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): 用于挑

我正在创建一个Android应用程序,其中第二个活动显示2个列表视图,定制为每行显示一个图像、两个标签和一个按钮。这是一个游戏,它显示了在发送和接收中分离的持续挑战。 我已经阅读了一些教程,它们都告诉我创建一个XML文件来设计行,一个挑战类,另一个用于阵列适配器,最后将其应用到onCreate on my activity上。 但是,在调试项目时,当访问包含两个ListView的活动时,应用程序会崩溃。这是我的代码,有一点是西班牙语的,希望你不介意:

挑战类(Partida.java):

用于挑战的特殊阵列适配器类(PartidasAdap.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;
}

}