列表视图只显示遍地最后一个项目

问题描述 投票:0回答:4

我是新android开发。我就读Udacity当然,我得到的地方,我必须使用一个服装arrayAdapter显示数据(文本)的一个ListView我钉的大部分,但我有显示数据的一个问题是:当我启动我的活动的ListView显示最后一个项目在可能的ArrayList我已经试过几乎所有他们的工作没有什么对我来说

我的数据

/**
 * 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);


    }


}

我的适配器:

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;

    }
}
java android arraylist android-listview custom-arrayadapter
4个回答
0
投票

tamazightTranslationenglishTranslation属性对于Numbers类含义,这些都是类属性的静态。从变量和从干将删除static,你应该罚款。看到这里类属性和实例之间的区别属性https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html


1
投票

试试这个方法

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;
}

而且别忘了,使NumbersAdapter延伸BaseAdapter


0
投票

我已经改变了你的模型类和适配器类,请按照此它将工作

 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;

    }
}

0
投票

如果显示在你的ListView最后一个项目,可能有几个原因。

  1. 你需要重写getCount()在ArrayAdapter有列表的大小。它可能会解决问题。
  2. 确认,列表视图是不是在你的XML布局声明中滚动视图。如果是,妥善处理使用nestedscrollview不然。

如果显示在你的列表视图中的所有行相同的数据,那么它可能是

  1. 在你的情况,你需要删除的属性前面static关键字,static意味着属性或方法属于Number类,而不是你的电话号码类对象的实例。基本上,它必须是原因。
© www.soinside.com 2019 - 2024. All rights reserved.