【问题标题】:Why data apears only after restart the app?为什么只有重启应用后才会出现数据?
【发布时间】:2020-10-29 16:31:39
【问题描述】:

我制作了一个小应用程序,它从用户那里获取一些值,并在按下第一个活动中的按钮后在另一个活动(第二个)的自定义列表视图中显示它。 现在的情况是有效的,但只有在我关闭应用程序并重新打开它之后。 我希望它在我按下按钮后立即工作。 有人可以帮我解决这个问题吗?

主活动

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private ArrayList<exampleItem> mExampleList = new ArrayList<>();
    RecyclerView mRecyclerView;
    private exampleAdapter mAdapter = new exampleAdapter(mExampleList);
    private RecyclerView.LayoutManager mLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,MainActivity2.class);
                startActivity(intent);
            }
        });

        setInsertButton();
        loadData();
        buildRecyclerView();
    }
    private void buildRecyclerView() {
        mRecyclerView = findViewById(R.id.recyclerview);
        mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(this);
        mAdapter = new exampleAdapter(mExampleList);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mAdapter);
    }
    private void loadData() {
        SharedPreferences sharedPreferences = getSharedPreferences("shared preferences8", MODE_PRIVATE);
        Gson gson = new Gson();
        String json = sharedPreferences.getString("task list8", null);
        Type type = new TypeToken<ArrayList<exampleItem>>() {
        }.getType();
        mExampleList = gson.fromJson(json, type);
        if (mExampleList == null) {
            mExampleList = new ArrayList<>();
        }
    }

    private void saveData() {
        SharedPreferences sharedPreferences = getSharedPreferences("shared preferences8", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        Gson gson = new Gson();
        String json = gson.toJson(mExampleList);
        editor.putString("task list8", json);
        editor.apply();
    }

    private void setInsertButton() {
        Button buttonInsert = findViewById(R.id.insert2);
        buttonInsert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final EditText line1 = findViewById(R.id.categ2);
                final EditText lineimg = findViewById(R.id.summ2);
                final EditText line2 = findViewById(R.id.date22);

                String lin1 = line1.getText().toString();
                String lin2 = line2.getText().toString();
                String lin3 = lineimg.getText().toString();

                mExampleList.add(new exampleItem(lin1, lin3, lin2));
                mAdapter.notifyItemInserted(mExampleList.size());
                mAdapter.notifyDataSetChanged();
                saveData();

            }
        });
    }
}

mainActivity2

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;

public class MainActivity2 extends AppCompatActivity {



    RecyclerView mRecyclerView;
    private RecyclerView.LayoutManager mLayoutManager;
    private ArrayList<exampleItem> mExampleList = new ArrayList<>();
    private exampleAdapter mAdapter = new exampleAdapter(mExampleList);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        setInsertButton();
        loadData();
        //buildRecyclerView();
}
    private void buildRecyclerView() {
        mRecyclerView = findViewById(R.id.recyclerview);
        mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(this);
        mAdapter = new exampleAdapter(mExampleList);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mAdapter);
    }
    private void loadData() {
        SharedPreferences sharedPreferences = getSharedPreferences("shared preferences8", MODE_PRIVATE);
        Gson gson = new Gson();
        String json = sharedPreferences.getString("task list8", null);
        Type type = new TypeToken<ArrayList<exampleItem>>() {
        }.getType();
        mExampleList = gson.fromJson(json, type);
        if (mExampleList == null) {
            mExampleList = new ArrayList<>();
        }
    }

    private void saveData() {
        SharedPreferences sharedPreferences = getSharedPreferences("shared preferences8", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        Gson gson = new Gson();
        String json = gson.toJson(mExampleList);
        editor.putString("task list8", json);
        editor.apply();
    }
        private void setInsertButton() {
            Button buttonInsert = findViewById(R.id.insert);
            buttonInsert.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    final EditText line1 = findViewById(R.id.categ);
                    final EditText lineimg = findViewById(R.id.summ);
                    final EditText line2 = findViewById(R.id.date2);

                    String lin1 = line1.getText().toString();
                    String lin2 = line2.getText().toString();
                    String lin3 = lineimg.getText().toString();


                    
                    mExampleList.add(new exampleItem(lin3, lin2, lin1));
                    mAdapter.notifyItemInserted(mExampleList.size());
                    mAdapter.notifyDataSetChanged();
                    
                    saveData();
                    finish();

                }
            });
        }
}

适配器

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
public class exampleAdapter extends RecyclerView.Adapter<exampleAdapter.ExampleViewHolder> {

    private ArrayList<exampleItem> mExampleList;

    public static class ExampleViewHolder extends RecyclerView.ViewHolder {
        public TextView mTextViewLine1;
        public TextView mTextViewLine2;
        public ImageView imageView;
        public ExampleViewHolder(View itemView) {
            super(itemView);
            mTextViewLine1 = itemView.findViewById(R.id.textview_line1);
            mTextViewLine2 = itemView.findViewById(R.id.textview_line2);
            imageView = itemView.findViewById(R.id.icond);
        }
    }
    public exampleAdapter(ArrayList<exampleItem> exampleList) {
        mExampleList = exampleList;
    }
    @Override
    public ExampleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_example_item, parent, false);
        ExampleViewHolder evh = new ExampleViewHolder(v);
        return evh;
    }
    @Override
    public void onBindViewHolder(ExampleViewHolder holder, int position) {
        exampleItem currentItem = mExampleList.get(position);
        holder.mTextViewLine1.setText(currentItem.getLine1());
        holder.mTextViewLine2.setText(currentItem.getLine2());
        if (currentItem.getLineimg().equalsIgnoreCase("s")) {
            holder.imageView.setImageResource(R.drawable.salary);
        }
        if (currentItem.getLineimg().equalsIgnoreCase("e")){
            holder.imageView.setImageResource(R.drawable.money);
        }
    }
    @Override
    public int getItemCount() {
        return mExampleList.size();
    }
}

【问题讨论】:

    标签: android auto-update insert-update


    【解决方案1】:

    在 loadData() 中,您需要在 mAdapter 上调用 notifyDataSetChanged()。

    【讨论】:

      【解决方案2】:

      在函数“loadData()”下的 MainActivity 类中,您必须更新适配器,通知数据已更改。

      函数 (loadData()) 应该类似于:

      private void loadData() {
          SharedPreferences sharedPreferences = getSharedPreferences("shared 
          preferences8", MODE_PRIVATE);
          Gson gson = new Gson();
          String json = sharedPreferences.getString("task list8", null);
          Type type = new TypeToken<ArrayList<exampleItem>>() {
          }.getType();
          mExampleList = gson.fromJson(json, type);
          if (mExampleList == null) {
              mExampleList = new ArrayList<>();
          }
          mAdapter.notifyDataSetChanged()
      }
      

      【讨论】:

        猜你喜欢
        • 2022-01-18
        • 1970-01-01
        • 2013-01-23
        • 1970-01-01
        • 1970-01-01
        • 2020-08-17
        • 1970-01-01
        • 1970-01-01
        • 2019-04-22
        相关资源
        最近更新 更多