【问题标题】:Android listview showing empty data until keyboard is shown?Android listview 在显示键盘之前显示空数据?
【发布时间】:2017-02-19 04:11:10
【问题描述】:

我正在使用带有自定义列表适配器的列表视图。

当我点击“+”按钮时,会动态添加一个列表项。每个列表项包含 4 个 EditText。

第一个列表项显示正确的数据,但其他项最右边的 EditTexts 为空。

这是问题

您可以看到最后编辑文本显示除第一个列表项之外的空数据。显示键盘后此问题已解决。

打开软键盘后

我尝试使用adapter.notifyDataSetChanged()list.invalidateViews(),但现在可以了。

我该如何解决这个问题?

onCreate()

Vector v;
CreateExerciseAdapter adapter;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_workout);

        v = new 
        adapter = new CreateExerciseAdapter(v,this);

        txtName = (EditText)findViewById(R.id.editTextName);
        list = (ListView)findViewById(R.id.listView2);

        //listview footer button (Add new button)
        LayoutInflater inflater = LayoutInflater.from(this);
        View inflate = inflater.inflate(R.layout.create_exercise_item, null);
        ImageButton btnAddNew = (ImageButton) inflate.findViewById(R.id.imageButtonAddNew);
        list.addFooterView(inflate);

        btnAddNew.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                View item = LayoutInflater.from(view.getContext())
                        .inflate(R.layout.create_new_exercise_item, null);
                v.add(item);
                adapter.notifyDataSetChanged();
            }
        });
        list.setAdapter(adapter);
    }

谢谢你:-)

更新

适配器

public class CreateWorkoutListAdapter extends BaseAdapter {
    Context context;
    Vector vector;
    LayoutInflater inflater = null;
    FontManager fm;

    public CreateWorkoutListAdapter(Context context, Vector vector){
        this.context = context;
        this.vector = vector;
        inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    @Override
    public int getCount() {
        return vector.size();
    }

    @Override
    public Object getItem(int position) {
        return vector.elementAt(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View view, ViewGroup viewGroup) {

        view = inflater.inflate(R.layout.create_new_exercise_item, null);

        final EditText txtName = (EditText)view.findViewById(R.id.editTextExerciseName);
        final EditText txtReps = (EditText)view.findViewById(R.id.editTextReps);
        final EditText txtMin = (EditText)view.findViewById(R.id.editTextMin);
        final EditText txtSec = (EditText)view.findViewById(R.id.editTextSecond);


        return view;
    }
}

【问题讨论】:

  • 什么是“v”?请同时发布适配器代码。
  • @NIkaKurdadze:谢谢。我更新了问题
  • 你能详细谈谈这个问题吗?添加的项目是否显示?您在“显示键盘后解决此问题”中的确切含义是什么?
  • @NikaKurdadze:我添加了截图。我认为现在问题很清楚了。
  • 您是在代码中的某处设置 EditTexts 的文本,还是它们只是在 xml 中定义?

标签: android listview listadapter


【解决方案1】:

请将您的 getView 替换为以下内容:

    @Override
    public View getView(final int position, View view, ViewGroup viewGroup) {

        view = inflater.inflate(R.layout.create_new_exercise_item, viewGroup, false);

        final EditText txtName = (EditText)view.findViewById(R.id.editTextExerciseName);
        final EditText txtReps = (EditText)view.findViewById(R.id.editTextReps);
        final EditText txtMin = (EditText)view.findViewById(R.id.editTextMin);
        final EditText txtSec = (EditText)view.findViewById(R.id.editTextSecond);


        return view;
    }

【讨论】:

  • 谢谢尼卡。我会试试的
  • 我试过你的答案,但没有奏效。然后我发现了问题。我从我的设备上卸载了 apk 文件并运行该项目。它工作得很好。我认为问题在于新 Android Studio 的运行过程。非常感谢。
  • 我认为这个答案应该被标记??
  • 很高兴您解决了这个问题。我认为不应接受此答案,因为它不是您特定问题的解决方案。
  • 是的。对此我很抱歉。谢谢
【解决方案2】:

变化:

list = (ListView)findViewById(R.id.yourlistviewid);

安装于:

list = (ListView)findViewById(R.id.

【讨论】:

  • 对不起,这是一个错误。我编辑了问题。对不起
  • 请填写您的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
相关资源
最近更新 更多