Персонализированный адаптер, пытающийся получить идентификатор каждого элемента и отобразить его - PullRequest
0 голосов
/ 28 октября 2018

Я сейчас работаю над персональным адаптером.У меня есть несколько кнопок в каждой из них.Один для удаления, один для редактирования и один для добавления в общий преф.list.

Однако я не знаю, как получить идентификатор или конкретное свойство из элемента, такого как его идентификатор.

Другими словами, я пытаюсь получить идентификатор (свойствоот моего объекта), чтобы отобразить, когда я нажму одну из кнопок, позже я реализую эту функцию.Тем не менее, я не очень понимаю, где взять элементы и что каждый @Override делает в адаптере, а также, где объявить функцию onClick?

Вот мой адаптер, пока (Toastare для тестовых целей):

package a.bogin.revmidterm.Adapter;


import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;
import a.bogin.revmidterm.Models.StringInfos;

import a.bogin.revmidterm.R;

public class StringsAdapter extends RecyclerView.Adapter<StringsAdapter.ViewHolder> {


    private List<StringInfos> allStrings;

    public StringsAdapter(List<StringInfos> lst){
        this.allStrings = lst;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView string1;
        TextView string2;
        TextView string3;
        Button delB;
        Button editB;
        Button addPrefB;

        public ViewHolder(final View itemView) {
            super(itemView);

            string1 = itemView.findViewById(R.id.forS1);
            string2 = itemView.findViewById(R.id.forS2);
            string3 = itemView.findViewById(R.id.forS3);

            delB = itemView.findViewById(R.id.delBtn);
            delB.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    }
            });

            editB = itemView.findViewById(R.id.editbtn);
            editB.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(itemView.getContext(), "TEST", Toast.LENGTH_SHORT).show();
                    }
            });

            addPrefB = itemView.findViewById(R.id.pref);
            addPrefB.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(itemView.getContext(), " C MON NOM", Toast.LENGTH_SHORT).show();
                }
            });
        }


    }

    @Override
    public void onBindViewHolder(final StringsAdapter.ViewHolder vh, final int position) {
        StringInfos str = allStrings.get(position);
        vh.string1.setText(str.getString1());
        vh.string2.setText(str.getString2());
        vh.string3.setText(str.getString3());


    }

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


    @Override
    public StringsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        Context ctx = parent.getContext();
        LayoutInflater inf = LayoutInflater.from(ctx);
        View createdViewForAdapter = inf.inflate(R.layout.string_adapter_infos, parent, false);
        ViewHolder vh = new ViewHolder(createdViewForAdapter);

        vh.editB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(), "TEEEEST", Toast.LENGTH_SHORT).show();
            }
        });


        return  vh;
    }

}

Вот мой класс объекта:

package a.bogin.revmidterm.Models;

public class StringInfos {

    private int id;
    private String string1;
    private String string2;
    private String string3;

    public StringInfos(String string1, String string2, String string3) {
        this.string1 = string1;
        this.string2 = string2;
        this.string3 = string3;
    }

    public String getString1() {
        return string1;
    }

    public void setString1(String string1) {
        this.string1 = string1;
    }

    public String getString2() {
        return string2;
    }

    public void setString2(String string2) {
        this.string2 = string2;
    }

    public String getString3() {
        return string3;
    }

    public void setString3(String string3) {
        this.string3 = string3;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

}

Кроме того, вот мой MainActivity:

    package a.bogin.revmidterm;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;

import java.util.ArrayList;

import a.bogin.revmidterm.Adapter.StringsAdapter;
import a.bogin.revmidterm.DB.DBManager;
import a.bogin.revmidterm.Models.StringInfos;

public class MainActivity extends AppCompatActivity {

    ArrayList<StringInfos> listOfAll;
    StringsAdapter strAdapter;
    RecyclerView.LayoutManager mLayoutManager;


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


        mLayoutManager = new LinearLayoutManager(this);
        .setLayoutManager(mLayoutManager);


        RecyclerView myOwnRc = findViewById(R.id.rc);
        myOwnRc.addItemDecoration(new DividerItemDecoration(getApplicationContext(), DividerItemDecoration.VERTICAL));

        mLayoutManager = new LinearLayoutManager(this);
        myOwnRc.setLayoutManager(mLayoutManager);



        listOfAll = DBManager.getAllItems();
        strAdapter = new StringsAdapter(listOfAll);

        myOwnRc.setAdapter(strAdapter);
        myOwnRc.setLayoutManager(new LinearLayoutManager(this));

        myOwnRc.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int pos, long id){

            }
        });

    }



public void addStuff(View v){
    Intent addNew = new Intent(this, AddItem.class);
    startActivity(addNew);
}

@Override
    public boolean onCreateOptionsMenu(Menu menu){
    MenuInflater inf = getMenuInflater();
    inf.inflate(R.menu.itemsstuff, menu);
    return true;
}

@Override
    public boolean onOptionsItemSelected(MenuItem item){

        switch (item.getItemId()){
            case R.id.ea:
                deleteAll();
                return true;
            case R.id.pref:
                seePrefs();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }

}


public void seePrefs(){

}

public void deleteAll(){
        listOfAll.clear();
        finish();
        startActivity(getIntent());
}
}

Не стесняйтесьпредложите мне ссылки, чтобы узнать, с чего начать, или попросите любую спецификацию.

Спасибо за ваше время.

Проблема с setOnItemClickListner:

  myOwnRc.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int pos, long id){

            }
        });

после myOwnRc,однако он красный, второй принят.

1 Ответ

0 голосов
/ 28 октября 2018

После использования этих строк для отображения ваших данных в упражнении:

 mLayoutManager = new LinearLayoutManager(this);
    mRecyclerView.setLayoutManager(mLayoutManager);


 mAdapter = new MyAdapter(myDataset);
 mRecyclerView.setAdapter(mAdapter);

Вы можете настроить setonItemClickListener :

mRecylerView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
           //here you can use the id or position to make changes to your data
           //Something like myDataset.add or myDataset.remove

           String one = myDataset.get(position).getString1();
        }
    });

Редактировать: Обновлено основное заданиечасть:

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
myOwnRc.setLayoutManager(linearLayoutManager);
strAdapter = new StringsAdapter(listOfAll);
myOwnRc.setAdapter(strAdapter);
myOwnRc.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    }
});
...