Android ListView失去焦点

Android ListView失去焦点,android,listview,lostfocus,Android,Listview,Lostfocus,我正在android studio中开发一个应用程序。 我的应用程序有一个listview,它的行中有Edittext、textview和复选框。 我的问题是当我的listvew中有五个以上的项目时,listview会失去焦点,例如:当我按下第六个项目上的复选框时,textview会显示第一个项目的名称。 我希望我能很好地解释我的问题 这是我的适配器: public AdapterListView(Context context, int resource, ArrayList<Objec

我正在android studio中开发一个应用程序。 我的应用程序有一个listview,它的行中有Edittext、textview和复选框。 我的问题是当我的listvew中有五个以上的项目时,listview会失去焦点,例如:当我按下第六个项目上的复选框时,textview会显示第一个项目的名称。 我希望我能很好地解释我的问题

这是我的适配器:

public AdapterListView(Context context, int resource, ArrayList<ObjectPeople> arraypeople) {

    super(context, resource);

    this.mContext = context;
    this.arrayPeople = arraypeople;
    this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

@Override

public  View getView(final int position, View convertView, ViewGroup parent) 
{

    final ViewHolder holder;
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.item_listview, null);
        holder = new ViewHolder();
        holder.mission_name = (TextView) convertView.findViewById(R.id.mission_name);
        holder.mission_time = (TextView) convertView.findViewById(R.id.mission_time);
        holder.edit_time = (EditText) convertView.findViewById(R.id.edit_time);
        holder.mission_image= (ImageView) convertView.findViewById(R.id.mission_image);
        holder.cbm = (CheckBox) convertView.findViewById(R.id.checkbo);


        convertView.setTag(holder);
        holder.cbm.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v ) {
                CheckBox cb = (CheckBox) v ;
                final ObjectPeople person = arrayPeople.get(position);
              if(cb.isChecked()) {
                  arrayPeople.get(position).checkbox= true;

                  int mis_tm=0;
                  try{    mis_tm= Integer.parseInt( holder.edit_time.getText().toString());}
                  catch (Exception e){
                      cb.setChecked(false);
                      Toast.makeText(mContext, "يرجى إدخال قيمة معينة", Toast.LENGTH_SHORT).show();}
                  person.time= mis_tm;
                  if(mis_tm>0&&mis_tm<1200){
                      holder.mission_name.setText("اسم المهمة: "+person.name);
                      holder.mission_time.setText( "مدة المهمة: "+ person.time );
                      holder.edit_time.setVisibility(View.GONE);}
                  else{
                      cb.setChecked(false);
                      Toast.makeText(mContext, "يرجى اختيار رقم حقيقي", Toast.LENGTH_SHORT).show();
                  }

                }
                else {
                  arrayPeople.get(position).checkbox= false;
                  holder.edit_time.setVisibility(View.VISIBLE);

                }
            }
        });

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    final ObjectPeople person = arrayPeople.get(position);
    holder.mission_name.setText("اسم المهمة: "+person.name);
    holder.mission_time.setText( "مدة المهمة: ");
    holder.mission_image.setImageResource(arrayPeople.get(position).image);






    holder.edit_time.setId(position);

        holder.edit_time.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            public void onFocusChange(View v, boolean hasFocus) {
                try {

                if (!hasFocus) {
                    final int position = v.getId();
                    final EditText Caption = (EditText) v;
                    arrayPeople.get(position).time = Integer.parseInt(Caption.getText().toString());

                }
                }catch (Exception e){}

            }

        });

    holder.cbm.setTag(arrayPeople);

    return convertView;

}

@Override

public int getCount() {

    return arrayPeople.size();

}

static class ViewHolder {
    TextView mission_name;
    TextView mission_time;
    EditText edit_time;
    ImageView mission_image;
    CheckBox cbm;

}

}
这个select.java包含arraylist和list视图:

public class select extends AppCompatActivity {
    ArrayList<ObjectPeople> arrPeople;
    ListView lvPeople;
    AdapterListView adapter;
    ObjectPeople person;
    SharedPreferences settings;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_select);
    settings = getApplicationContext().getSharedPreferences("shared", 0);
    lvPeople= (ListView) findViewById(R.id.lvPeopl);
    arrPeople=new ArrayList<>();

    person = new ObjectPeople("حفظ قرآن", 0,false, R.drawable.quran_hifz_r);
    arrPeople.add(person);

    person = new ObjectPeople("تلاوة قرآن", 0 ,false,R.drawable.img);
    arrPeople.add(person);

    person = new ObjectPeople("قراءة كتاب", 0 , false,R.drawable.books_r);
    arrPeople.add(person);

    person = new ObjectPeople("دورات تطوير مهارات", 0 , false,R.drawable.courses_r);
    arrPeople.add(person);


    person = new ObjectPeople("رياضة", 15 , false,R.drawable.sport_r);
    arrPeople.add(person);
    final String[] misson_name = new String[1];

    Button adf= (Button) findViewById(R.id.add_mission_out_btn);
    adf.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            View view = LayoutInflater.from(select.this).inflate(R.layout.add_mission_lyt,null);
            final EditText add_name = (EditText) view.findViewById(R.id.add_mission_name);
            AlertDialog.Builder builder = new AlertDialog.Builder(select.this);
            builder.setMessage("add your mission")

                    .setView(view)
                    .setPositiveButton("إضافة", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                             misson_name[0] = add_name.getText().toString();
                            arrPeople.add(new ObjectPeople(misson_name[0], 0, true,R.drawable.smile_small_r));

                        }
                    })
                    .setNegativeButton("إلغاء",null)
                    .setCancelable(false);
            AlertDialog alert =builder.create();
            alert.show();


        }
    });



    adapter=new AdapterListView(this,R.layout.item_listview,arrPeople);
    lvPeople.setAdapter(adapter);
    checkButtonClick();
}






private void checkButtonClick() {


    Button myButton = (Button) findViewById(R.id.btn_save);

    myButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            SharedPreferences settings = getApplicationContext().getSharedPreferences("shared", 0);
            int  hours2=settings.getInt("hours",0)*60;
            ArrayList<ObjectPeople> selected_missions = new ArrayList<>();
            int missoins_time_calc=0;
            for (int i = 0; i <arrPeople.size(); i++) {
                if(arrPeople.get(i).checkbox==true){
                    selected_missions.add(arrPeople.get(i));
                missoins_time_calc= missoins_time_calc + arrPeople.get(i).time;}
            }
            if (hours2 == missoins_time_calc){
                Gson gson = new Gson();
                String  jsonText = gson.toJson(selected_missions);
                SharedPreferences.Editor editor = settings.edit();
                editor.putString("selected_array", jsonText);
                editor.commit();

                Intent intent = new Intent(select.this, yourprogram.class);
                startActivity(intent);
                overridePendingTransition(R.anim.fade_in,R.anim.fade_out);

            }
            else if (hours2 > missoins_time_calc){
                Toast.makeText(select.this, "بقي"+(-missoins_time_calc+ hours2)+" دقيقة ", Toast.LENGTH_SHORT).show();}
            else if (hours2< missoins_time_calc){
                Toast.makeText(select.this,"يوجد "+ (-hours2+missoins_time_calc)+" دقيقة زيادة على الوقت المخصص", Toast.LENGTH_SHORT).show();
        }

           /* ArrayList<missions> missionsList = dataAdapter.missionsList;
            for(int i = 0; i< missionsList.size(); i++){
                missions missions = missionsList.get(i);
                if(missions.isSelected()){}}*/


        }
    });
}


}

我认为错误在于ArrayOple列表的填充方式,如果您说第六项使您获得了第一项,您可以尝试颠倒顺序

Collections.reverse(arrayPeople);
您可以将这行代码放在适配器的holder.cbm.setOnClickListener下面


希望有帮助。

请添加源代码。您可以使用RecyclerView而不是ListView。您的问题在适配器类中的某个位置,如果您发布适配器的源代码,我们应该能够看到发生了什么:@AndreBreton我添加了我的adapter@bnayagrawal我添加了我的源代码我不想撤销,列表丢失了,我的问题的另一个例子是:当我按下第7项的复选框时,textview会显示第二项的名称