当Listview的大小超过屏幕大小时,如何在Listview中保存数据?

时间:2016-05-13 10:56:35

标签: android listview

我正在尝试保存或从包含ListView的{​​{1}}获取数据。 当我尝试保存或从屏幕大小超过EditText的数据中获取数据时,我收到错误消息。我知道为什么,但不知道如何解决它。原因是他们重用了这些观点。

以下是我想要做的例子。如果屏幕上有5行,屏幕上有1行,我怎样才能引用第6行?

ListView

我将数据存储在 public void saveData(){ StringBuffer buffer = new StringBuffer(); int count = listView.getCount(); for(int i=0 ;i < count ;i++) { View child = listView.getChildAt(i); TextView setText1 = (TextView)child.findViewById(R.id.TextView1); EditText text = (EditText) child.findViewById(R.id.setText1); String content1 = setText1.getText().toString().trim(); String content2 = text.getText().toString().trim(); buffer.append(content1); buffer.append(","); buffer.append(content2); buffer.append(","); }

Stringbuffer

这是logcat。 引起:

public class CustomAdapter extends ArrayAdapter<String> {

    public CustomAdapter(Context context, List<String> num_set ) {
        super(context, R.layout.custom_row  ,num_set );
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(getContext());
        View CustomView = inflater.inflate(R.layout.custom_row ,parent , false);


        String[] num = getItem(position).split(",");
        TextView setText1 = (TextView)CustomView.findViewById(R.id.TextView1);
        EditText setText2 =(EditText)CustomView.findViewById(R.id.setText2);

        setText1.setText(num[0]);
        setText2.setText(num[1]);
        return CustomView;
    }

}

这是java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference

custom_row.xml

2 个答案:

答案 0 :(得分:0)

editText.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {

                }

                @Override
                public void afterTextChanged(Editable s) {

                }
            }); 

使用addtext listner并在edittext中编写数据时保存,以便获得特定数据。

答案 1 :(得分:0)

您应该将数据与视图分开。因为使用ListViews,不在屏幕上的行实际上不存在!如果您连续输入某些内容,则将其滚出屏幕,然后再次注意到文本已消失。

我建议您使用类似Arjun's answer的内容将数据保存在某处的onTextChanged中。这样,您也可以在滚动进出时再次恢复文本。

我也看到你没有使用行重用(使用适配器的convertView参数)。我建议你也阅读它,也进入ViewHolder模式,因为你每次都在构建一个新行