首页 > 解决方案 > 可扩展的recyclerview实现

问题描述

我正在尝试将可扩展添加recyclerview到我的应用程序中。到目前为止我所做的是:

  1. 在 MyDatabaseHelper.java中使用 getter 和 setter 创建了“私有布尔扩展”。
  2. “ArrayList<String> word_id, word_title, word_meaning”这是我在MainActivity.java 中的 ArrayList 问题是,在我的customAdapter.java -->”中boolean isExpanded = ArrayList.get(position).isExpanded();出现错误:非静态方法 'get(int)' 不能被引用静态上下文

应该传递什么而不是ArrayList来运行代码。文件中的相关代码是:

MainActivity.java

    public class MainActivity extends AppCompatActivity {


    private Button button;
    RecyclerView recyclerView;

    MyDatabaseHelper myDB;
    ArrayList<String> word_id, word_title,word_meaning;
    customAdapter customAdapter;


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

        button = (Button)findViewById(R.id.add);
        recyclerView = findViewById(R.id.recyclerView);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    openAddActivity();
            }
        });

        myDB = new MyDatabaseHelper(MainActivity.this);
        word_id = new ArrayList<>();
        word_title = new ArrayList<>();
        word_meaning = new ArrayList<>();

        storeDataInArrays();
        customAdapter = new customAdapter(MainActivity.this,word_id,word_title,word_meaning);
        recyclerView.setAdapter(customAdapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));



}    }

customAdapter.java

    public class customAdapter extends RecyclerView.Adapter<customAdapter.MyViewHolder>{

    Context context;
    private ArrayList word_id,word_title,word_meaning;

    customAdapter(Context context,
                  ArrayList word_id,
                  ArrayList word_title,
                  ArrayList word_meaning){
        this.context = context;
        this.word_id = word_id;
        this.word_title = word_title;
        this.word_meaning = word_meaning;

    }

    @NonNull

    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.my_row,parent,false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {

        holder.word_id.setText(String.valueOf(word_id.get(position)));
        holder.word_title.setText(String.valueOf(word_title.get(position)));
        holder.word_meaning.setText(String.valueOf(word_meaning.get(position)));

        boolean isExpanded = ArrayList.get(position).isExpanded();
        holder.expandableLayout.setVisibility(isExpanded?View.VISIBLE:View.GONE);
    }

    @Override
    public int getItemCount() {
        return word_id.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {

        TextView word_id,word_title,word_meaning;
        ConstraintLayout expandableLayout;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            word_id = itemView.findViewById(R.id.word_id);
            word_title = itemView.findViewById(R.id.word_title);
            word_meaning = itemView.findViewById(R.id.word_meaning);

            expandableLayout = itemView.findViewById(R.id.expandable_layout);

            word_title.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                  MyDatabaseHelper myDatabaseHelper = ArrayList.get(getAdapterPosition());
                  myDatabaseHelper.setExpanded(!myDatabaseHelper.isExpanded());
                  notifyItemChanged(getAdapterPosition());
                }
            });

        }
    }
}

MyDatabaseHelper.java

    public class MyDatabaseHelper extends SQLiteOpenHelper {
    private  Context context;

    private boolean expanded;

    private static final String DATABASE_NAME = "wordLibrary.db";
    private static final int DATABASE_VERSION = 1;

    private   static final String TABLE_NAME = "my_library";
    private   static  final String COLUMN_ID = "_id";
    private   static  final String COLUMN_TITLE = "word_title";
    private   static  final String COLUMN_MEANING = "word_meaning";



    public MyDatabaseHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        this.context = context;
    }

    public boolean isExpanded() {
        return expanded;
    }

    public void setExpanded(boolean expanded) {
        this.expanded = expanded;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        String query =
                "CREATE TABLE " + TABLE_NAME +
                        " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                        COLUMN_TITLE + " TEXT, " +
                        COLUMN_MEANING + " TEXT);";

        db.execSQL(query);

        this.expanded = false;

    }
}

标签: javaandroidandroid-studioandroid-recyclerview

解决方案


推荐阅读