Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Eclipse - Fatal编程技术网

Java 在ListView中编辑文本行为

Java 在ListView中编辑文本行为,java,android,eclipse,Java,Android,Eclipse,我使用以下代码在列表视图中显示编辑框 我的每个ListView项都包含以下模式 [EditText 1] [EditText 2] [EditText 3 ][EditText 4][EditText 5] class CustomArrayAdapterForScore extends ArrayAdapter<ScoreModel> { public CustomArrayAdapterForScore()

我使用以下代码在列表视图中显示编辑框

我的每个ListView项都包含以下模式

    [EditText 1] [EditText 2] [EditText 3 ][EditText  4][EditText 5]



       class CustomArrayAdapterForScore extends ArrayAdapter<ScoreModel> 
        {
            public CustomArrayAdapterForScore() 
            {
                super(MeetScore.this, R.layout.score_event_layout, myScoreArray);
            }

            @Override
            public View getView(final int position, View convertView, ViewGroup parent) 
            {
                    View view = null;
                    LayoutInflater inflator = MeetScore.this.getLayoutInflater();
                    view = inflator.inflate(R.layout.score_event_layout, parent, false);
                    final ViewHolder viewHolder = new ViewHolder();

                    viewHolder.title = (TextView) view.findViewById(R.id.title);

                    viewHolder.box1 = (EditText) view.findViewById(R.id.box1);
                    viewHolder.box2 = (EditText) view.findViewById(R.id.box2);
                    viewHolder.box3 = (EditText) view.findViewById(R.id.box3);
                    viewHolder.box4 = (EditText) view.findViewById(R.id.box4);
                    viewHolder.box5 = (EditText) view.findViewById(R.id.box5);
                    viewHolder.box6 = (EditText) view.findViewById(R.id.box6);

                    viewHolder.box1.addTextChangedListener(new TextWatcher() 
                    {
                        public void onTextChanged(CharSequence c, int arg1, int arg2, int arg3) 
                        {
                            ScoreModel score = myScoreArray.get(position);
                            score.box1 = Integer.valueOf(viewHolder.box1.getText().toString());
                            myScoreArray.set(position, score);
                            listView.invalidateViews();
                        }
                        public void beforeTextChanged(CharSequence c, int arg1, int arg2, int arg3){} 
                        public void afterTextChanged(Editable arg0){} 
                    });

    view.tag(viewHolder);
return view;
[EditText 1][EditText 2][EditText 3][EditText 4][EditText 5]
类CustomArrayAdapterForScore扩展了ArrayAdapter
{
公共CustomArrayAdapterForScore()
{
超级(MeetScore.this、R.layout.score\u event\u layout、myScoreArray);
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图)
{
视图=空;
LayoutFlater充气器=meetCore.this.getLayoutFlater();
视图=充气机。充气(R.layout.score\u event\u布局,父级,false);
最终ViewHolder ViewHolder=新的ViewHolder();
viewHolder.title=(TextView)view.findViewById(R.id.title);
viewHolder.box1=(EditText)view.findViewById(R.id.box1);
viewHolder.box2=(EditText)view.findViewById(R.id.box2);
viewHolder.box3=(EditText)view.findViewById(R.id.box3);
viewHolder.box4=(EditText)view.findViewById(R.id.box4);
viewHolder.box5=(EditText)view.findViewById(R.id.box5);
viewHolder.box6=(EditText)view.findViewById(R.id.box6);
viewHolder.box1.addTextChangedListener(新的TextWatcher()
{
public void onTextChanged(字符序列c、int arg1、int arg2、int arg3)
{
ScoreModel score=myScoreArray.get(位置);
score.box1=Integer.valueOf(viewHolder.box1.getText().toString());
myScoreArray.set(位置、分数);
listView.invalidateViews();
}
public void beforeTextChanged(字符序列c、int arg1、int arg2、int arg3){}
public void posterextchanged(可编辑arg0){}
});
view.tag(viewHolder);
返回视图;
当我更改编辑框的文本时,单击它并使用键盘写入,例如,如果我写入9,则显示9,但一旦键盘消失,文本几乎消失。编辑文本显示空白

怎么了

  • 使用视图固定器的意义是什么?当您不使用
    convertView
    时,您总是在膨胀新视图

  • 我在
    getView()
    中看到对
    listView.invalidateViews()的调用。这可能会导致
    listView
    在每次文本更改时失效。在失效时,
    getView()
    被调用,一个新的
    TextChangedListener
    被附加到
    EditText
    上。所有这样的侦听器都在做相同的事情n次,这会造成混乱

  • 此外,在膨胀视图时,您没有将文本设置回保存位置(
    mycorearray


  • 这不是您使用ViewHolder的方式。这是您应该如何使用它:

    public View getView(...)
    {
    View rootView=convertView;
    ViewHolder holder;
    if(rootView==null)
      {
      rootView=inflater....
      rootView.setTag(holder =new ViewHolder());
      //...
      }
    else holder=(ViewHolder) rootView.getTag();
    //...
    }
    
    listView中的EditText有问题,因为它会导致listView项因软键盘而移动。请设置清单:

    android:windowSoftInputMode="adjustPan"
    

    (我不确定该值是否正确)。或者,创建一个用于编辑所选项目的对话框。

    我不确定为什么会发生这种情况,除非这与您调用
    invalidateViews()有关
    在您的
    列表视图中
    而不保存
    编辑文本中的内容
    。但是从我看来,您没有正确使用
    视图持有者
    。您每次都在重新创建
    视图
    ,但是
    视图持有者
    是这样的,因此您不必每次都从
    资源中重新创建它们。您应该保存您的
    ViewHolder
    类中的每个
    视图
    ,然后使用该视图获取对您的
    视图的引用
    其他时间您可以用代码进行解释吗?无效视图是为测试而添加的,我已将其删除并显示相同的视图。检查编辑的codelistView.invalidateViews()我添加到测试中。没有它,响应相同。我将标记中的每个viewHolder设置为view,然后返回view