Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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/3/android/185.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
Java Listview只反复显示最后一项_Java_Android_Arraylist_Android Listview_Custom Arrayadapter - Fatal编程技术网

Java Listview只反复显示最后一项

Java Listview只反复显示最后一项,java,android,arraylist,android-listview,custom-arrayadapter,Java,Android,Arraylist,Android Listview,Custom Arrayadapter,我是android开发新手。我参加了Udacity课程,我必须使用服装阵列适配器来显示数据(文本)的列表视图。我确定了大部分内容,但我对显示的数据有一个问题,即:当我启动活动时,列表视图显示五月阵列列表上的最后一项 我几乎什么都试过了他们什么都不管用 我的数据 /** * Displays text to the user. */ public class Numbers { //First we Set the Stat of our Class : // Engli

我是android开发新手。我参加了Udacity课程,我必须使用服装阵列适配器来显示数据(文本)的列表视图。我确定了大部分内容,但我对显示的数据有一个问题,即:当我启动活动时,列表视图显示五月阵列列表上的最后一项 我几乎什么都试过了他们什么都不管用

我的数据

/**
 * Displays text to the user.
 */
public class Numbers {


    //First we Set the Stat of our Class :

    // English Translation
    public static String englishTranslation;

    //Tamazight Translation
    public static String tamazightTranslation;

    /**
     * Create a new Numbers Object :
     *
     * @param englishTranslation   is for ENGLISH NUMBERS
     * @param tamazightTranslation is for TAMAZIGHT NUMBERS
     */

    //Constructor
    public Numbers(String englishTranslation, String tamazightTranslation) {


        this.englishTranslation = englishTranslation;
        this.tamazightTranslation = tamazightTranslation;

    }

    //Getter
    public static String getEnglishTranslation() {
        return englishTranslation;
    }


    public static String getTamazightTranslation() {
        return tamazightTranslation;
    }


}

我的ArrayList:

public class ActivityNumbers extends AppCompatActivity {

    //Add English numbers to The ARRAYList
    ArrayList<Numbers> englishNumbers = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_numbers);



        englishNumbers.add(new Numbers("One", "Yan"));
        englishNumbers.add(new Numbers("Two", "Sin"));
        englishNumbers.add(new Numbers("Three", "Krad"));
        englishNumbers.add(new Numbers("Four", "Koz"));
        englishNumbers.add(new Numbers("Five", "Smos"));
        englishNumbers.add(new Numbers("Six", "Sdis"));
        englishNumbers.add(new Numbers("Seven", "Sa"));
        englishNumbers.add(new Numbers("Eight", "Tam"));
        englishNumbers.add(new Numbers("Nine", "Tza"));
        englishNumbers.add(new Numbers("Ten", "Mraw"));

        //EnglishNumbers.remove(0);
        //EnglishNumbers.size();
        // EnglishNumbers.get(1);
        //Create a NEW TV object




        /**Creating an ArrayAdapter (DATA HOLDER)
         @param Context / the ACTIVITY concerned
         @param Android.R.layout : an XML layout file contains TextView predefined by Android
         @param Items to display */


        NumbersAdapter itemsAdapter = new NumbersAdapter (this, englishNumbers);

        // Linking the ListView object to a Variable
        ListView numbersListView = (ListView) findViewById(R.id.list);
        //Calling setAdapter Method on numbersListView with "itemsAdapter
        numbersListView.setAdapter(itemsAdapter);


    }


}
公共类ActivityNumber扩展了AppCompatActivity{
//将英文数字添加到ARRAYList
ArrayList EnglishNumber=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_编号);
增加(新的数字(“一”,“延”);
英文数字。加上(新的数字(“2”,“Sin”);
增加(新的数字(“三”,“克拉”);
增加(新的数字(“四”,“科兹”);
增加(新的数字(“五”、“SMO”);
增加(新的数字(“六”、“特殊数字”);
增加(新的数字(“七”,“Sa”);
增加(新的数字(“八”,“Tam”));
增加(新的数字(“九”,“Tza”);
英文编号。添加(新编号(“十”、“Mraw”);
//删除(0);
//英文数字。大小();
//英语数字。get(1);
//创建新的电视对象
/**创建ArrayAdapter(数据保持器)
@参数上下文/相关活动
@param Android.R.layout:XML布局文件包含Android预定义的TextView
@要显示的参数项*/
NumberAdapter itemsAdapter=新的NumberAdapter(这是英文数字);
//将ListView对象链接到变量
ListView numberListView=(ListView)findViewById(R.id.list);
//使用“itemsAdapter”在NumberListView上调用setAdapter方法
numbersListView.setAdapter(itemsAdapter);
}
}

我的适配器:

public class NumbersAdapter extends ArrayAdapter<Numbers> {

    public NumbersAdapter(Context context, ArrayList<Numbers> englishNumbers) {
        super(context, 0, englishNumbers);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

        View listItemView = convertView;
        if (listItemView == null) {
            listItemView = LayoutInflater.from(getContext()).inflate(R.layout.listitem, parent, false);
        }

        Numbers numbers = getItem(position);


        System.out.println(position);

        TextView tamazight_item = (TextView) listItemView.findViewById(R.id.tamazight_item);
        TextView english_item = (TextView) listItemView.findViewById(R.id.english_item);


        tamazight_item.setText(numbers.getEnglishTranslation());
        System.out.println(numbers.getEnglishTranslation());

        english_item.setText(numbers.getTamazightTranslation());

        System.out.println(numbers.getTamazightTranslation());


        return listItemView;

    }
}
public class NumbersAdapter扩展了ArrayAdapter{
公共数字适配器(上下文,数组列表英文数字){
超级(上下文,0,英文编号);
}
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
View listItemView=convertView;
如果(listItemView==null){
listItemView=LayoutInflater.from(getContext()).flate(R.layout.listitem,父项,false);
}
编号=获取项目(位置);
系统输出打印项次(位置);
TextView tamazight_item=(TextView)listItemView.findViewById(R.id.tamazight_item);
TextView英语项目=(TextView)listItemView.findViewById(R.id.english项目);
tamazight_item.setText(number.getEnglishTranslation());
System.out.println(numbers.getEnglishTranslation());
english_item.setText(numbers.getAmazightTranslation());
System.out.println(numbers.getAmazightTranslation());
返回listItemView;
}
}

您的
tamazightTranslation
englishTranslation
属性在
数字上是静态的,这意味着,这些都是类属性。从变量和getter中删除
静态的
,您应该不会有问题。请在此处查看类属性和实例属性之间的差异

这样试试

Context context; 
ArrayList<Numbers> englishNumbers;

public NumbersAdapter(Context context, ArrayList<Numbers> englishNumbers) 
{
  this.context=context;
  this.englishNumbers=englishNumbers;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    convertView= LayoutInflater.from(context).inflate(R.layout.listitem,parent,false);

    TextView tamazight_item = (TextView) listItemView.findViewById(R.id.tamazight_item);
    TextView english_item = (TextView) listItemView.findViewById(R.id.english_item);


    tamazight_item.setText(englishNumbers.get(position).getEnglishTranslation());
    english_item.setText(englishNumbers.get(position).getTamazightTranslation());

    return convertView;
}
语境;
ArrayList英语编号;
公共数字适配器(上下文,数组列表英文数字)
{
this.context=context;
这个。EnglishNumber=EnglishNumber;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图)
{
convertView=LayoutFlater.from(上下文)。充气(R.layout.listitem,父项,false);
TextView tamazight_item=(TextView)listItemView.findViewById(R.id.tamazight_item);
TextView英语项目=(TextView)listItemView.findViewById(R.id.english项目);
tamazight_item.setText(英语编号.get(位置).getEnglishTranslation());
english_item.setText(englishNumbers.get(position.getAmazightTranslation());
返回视图;
}

不要忘了制作NumberAdapter extends BaseAdapter

我已经更改了您的模型类和适配器类,请按照此操作,它将起作用

 public class Numbers {
    //First we Set the Stat of our Class :

    // English Translation
    private String englishTranslation;

    //Tamazight Translation
    private  String tamazightTranslation;

    public String getEnglishTranslation() {
        return englishTranslation;
    }

    public void setEnglishTranslation(String englishTranslation) {
        this.englishTranslation = englishTranslation;
    }

    public String getTamazightTranslation() {
        return tamazightTranslation;
    }

    public void setTamazightTranslation(String tamazightTranslation) {
        this.tamazightTranslation = tamazightTranslation;
    }
}

适配器类

    public class NumbersAdapter extends ArrayAdapter<Numbers> {
     private Context mContext;
     private ArrayList<Numbers>list;
     public NumbersAdapter(Context context, ArrayList<Numbers> englishNumbers) {
      super(context, 0, englishNumbers);
      this.mContext=context;
      this.list = englishNumbers;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

        View listItemView = convertView;
        if (listItemView == null) {
            listItemView = LayoutInflater.from(mContext).inflate(R.layout.listitem, parent, false);
        }

        Numbers numbers = list.get(position);


        System.out.println(position);

        TextView tamazight_item = (TextView) listItemView.findViewById(R.id.tamazight_item);
        TextView english_item = (TextView) listItemView.findViewById(R.id.english_item);


        tamazight_item.setText(numbers.getEnglishTranslation());
        System.out.println(numbers.getEnglishTranslation());

        english_item.setText(numbers.getTamazightTranslation());

        System.out.println(numbers.getTamazightTranslation());


        return listItemView;

    }
}
public class NumbersAdapter扩展了ArrayAdapter{
私有上下文;
私人审裁专家;
公共数字适配器(上下文,数组列表英文数字){
超级(上下文,0,英文编号);
this.mContext=上下文;
this.list=英文编号;
}
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
View listItemView=convertView;
如果(listItemView==null){
listItemView=LayoutFlater.from(mContext).充气(R.layout.listitem,父项,false);
}
number=list.get(位置);
系统输出打印项次(位置);
TextView tamazight_item=(TextView)listItemView.findViewById(R.id.tamazight_item);
TextView英语项目=(TextView)listItemView.findViewById(R.id.english项目);
tamazight_item.setText(number.getEnglishTranslation());
System.out.println(numbers.getEnglishTranslation());
english_item.setText(numbers.getAmazightTranslation());
System.out.println(numbers.getAmazightTranslation());
返回listItemView;
}
}

如果它在listview中显示最后一项,可能有几个原因

  • 您需要在ArrayAdapter中重写
    getCount()
    ,以获得列表的大小。这可能会解决此问题

  • 确保列表视图未在xml布局的scrollview中声明。如果是,请使用nestedscrollview或其他方法正确处理它

  • 如果它在所有行中显示相同的数据