更改片段之后,如何将内容保留在listView中 当我的Android应用更改碎片或更改设备位置为景观时,我将面临问题。 ListView中的内容将命令 /删除。我已经阅读了一些有关它的信息...

问题描述 投票:0回答:1
public class ExpaneseModel { String one; String two; public ExpaneseModel(String one, String two) { this.one=one; this.two=two; } public String getOne() { return one; } public String getTwo() { return two; } }

below是自定义适配器类:

public class ExpansesCustomAdapter extends ArrayAdapter<ExpaneseModel> implements View.OnClickListener{ private ArrayList<ExpaneseModel> dataSet; Context mContext; // View lookup cache private static class ViewHolder { TextView txtOne; TextView txtTwo; } public ExpansesCustomAdapter(ArrayList<ExpaneseModel> data, Context context) { super(context, R.layout.expanses_row_item, data); this.dataSet = data; this.mContext=context; } @Override public void onClick(View v) { int position=(Integer) v.getTag(); Object object= getItem(position); ExpaneseModel dataModel=(ExpaneseModel) object; } private int lastPosition = -1; @Override public View getView(int position, View convertView, ViewGroup parent) { // Get the data item for this position ExpaneseModel dataModel = getItem(position); // Check if an existing view is being reused, otherwise inflate the view ViewHolder viewHolder; // view lookup cache stored in tag final View result; if (convertView == null) { viewHolder = new ViewHolder(); LayoutInflater inflater = LayoutInflater.from(getContext()); convertView = inflater.inflate(R.layout.expanses_row_item, parent, false); viewHolder.txtOne = (TextView) convertView.findViewById(R.id.one); viewHolder.txtTwo = (TextView) convertView.findViewById(R.id.two) result=convertView; convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); result=convertView; } Animation animation = AnimationUtils.loadAnimation(mContext, (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top); result.startAnimation(animation); lastPosition = position; viewHolder.txtName.setText(dataModel.getName()); viewHolder.txtType.setText(dataModel.getAmount()); viewHolder.info.setOnClickListener(this); viewHolder.info.setTag(position); // Return the completed view to render on screen return convertView; } }

	

问题是当您返回A

Fragment
时,
onCreateView()

会打电话。所以一切都会出错。我通过以下步骤解决了这个问题:

save
android listview android-fragments
1个回答
0
投票
变量作为类变量。所以你保存了

rootView

In
onCreateView()
,在

rootview = inflater.inflate(R.layout.tab2, container, false);
    之前,检查是否
  1. rootView
    是否为null。如果不是,请返回
    rootView
  2. 不会重新创建这种碎片,也没有任何改变。您的最终代码应该是这样:
  3. public class Tab extends Fragment {
    
        ArrayList<ExpaneseModel> beta1;
        ListView listView;
        private static ExpansesCustomAdapter adapter;
        private View rootView;
    
        @Override
        public void onCreate (Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            if(savedInstanceState==null){
    
            }else{
    
            }
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
            if (rootView != null)
                return rootView;
            rootview = inflater.inflate(R.layout.tab2, container, false);
    
            Button Add = (Button)rootview.findViewById(R.id.btnAdd);
    
            listView=(ListView)rootview.findViewById(R.id.list);
    
            beta1= new ArrayList<>();
    
            listView.setAdapter(adapter);
    
            Add.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    final Dialog dialogsetting = new Dialog(getActivity());
                    dialogsetting.requestWindowFeature(Window.FEATURE_NO_TITLE);
                    dialogsetting.setContentView(R.layout.entry_input);
                    final EditText one = (EditText)dialogsetting.findViewById(R.id.et_one);
                    final EditText two = (EditText)dialogsetting.findViewById(R.id.et_two);
                    Button ok = (Button)dialogsetting.findViewById(R.id.btnOK);
                    Button cancel = (Button)dialogsetting.findViewById(R.id.btnCancel);
    
                    ok.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                dataModels.add(new ExpaneseModel(one.getText().toString(), two.getText().toString()));
                            adapter.notifyDataSetChanged();                       
                            dialogsetting.dismiss();
                        }
                    });
    
                    cancel.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            dialogsetting.dismiss();
                        }
                    });
                    dialogsetting.show();
                }
    
            });
            return rootview;
        }
    
        @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
           //I am not sure what code to type in here
    
        } 
    }
    
    	
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.