Как использовать переменные некоторого класса в другом классе (ConsumerDescAndEdit.java) через onItemClickListener? - PullRequest
0 голосов
/ 01 апреля 2019

Мне нужно отобразить name, phoneNumber и accountNumber в EditText в классе ConsumerdescAndEdit, так как передать эти значения при выполнении OnItemClickListener?

ShowAll.java :

У меня есть ListView, который завышен от CustomAdapter.

Intent intent = new Intent(ShowAll.this,ConsumerDescAndEdit.class);
startActivity(intent);     

CustomAdapter.java:


public class CustomAdapter extends BaseAdapter {

    Context mContext;

    TextView nameView;
    TextView phoneNumberView;
    TextView accountView;

    String name;
    String phoneNumber;
    String accountNumber;

    ArrayList<Consumer> objects;


    public CustomAdapter(Context context, int resource, ArrayList<Consumer> objects){

        this.objects = objects;
        this.mContext = context;

    }
    public CustomAdapter(){

    }
    @Override
    public int getCount() {
        return objects.size();
    }

    @Override
    public Object getItem(int position) {
        return objects.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        Consumer consumer = (Consumer) getItem(position);

        // Values to be displayed.

        name = consumer.getName();
        phoneNumber = consumer.getPhoneNumber();
        accountNumber = consumer.getAccountNumber();


        LayoutInflater inflater = LayoutInflater.from(mContext); // generate an inflater using context.
        convertView = inflater.inflate(R.layout.details_layout,null); // inflate details_layout and store it in convertView.

        nameView = convertView.findViewById(R.id.nameView);
        phoneNumberView = convertView.findViewById(R.id.phoneNumberView);
        accountView = convertView.findViewById(R.id.accountView);

        nameView.setText(name);
        phoneNumberView.setText(phoneNumber);
        accountView.setText(accountNumber);

        return convertView;
    }

}

ConsumerDescAndEdit.java (где мне нужно использовать переменные):


public class ConsumerDescAndEdit extends AppCompatActivity {

    Button updateButton;

    EditText nameEditTextVar;
    EditText phoneEditTextVar;
    EditText accountEditTextVar;

    //      Variables to store user inputted data.
    String nameEdit;
    String phoneEdit;
    String accountEdit;

    DatabaseHelper dbHelper;

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

        dbHelper = new DatabaseHelper(this);

        updateButton = findViewById(R.id.updateButton);

        nameEditTextVar = findViewById(R.id.nameEditScreen);
        phoneEditTextVar = findViewById(R.id.phoneNumberEditScreen);
        accountEditTextVar = findViewById(R.id.accountNumberEditScreen);

        String s_intent = getIntent().getStringExtra("EXTRA_SESSION_ID");
        nameEditTextVar.setText(s_intent);


        updateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                nameEdit = nameEditTextVar.getText().toString();
                phoneEdit = phoneEditTextVar.getText().toString();
                accountEdit = accountEditTextVar.getText().toString();

                if (nameEdit.isEmpty() || phoneEdit.isEmpty() || accountEdit.isEmpty()) {
                    Toast.makeText(ConsumerDescAndEdit.this, "Data Insufficient", Toast.LENGTH_SHORT).show();
                } else {
                    boolean b = dbHelper.updateData(nameEdit, phoneEdit, accountEdit);
                    if (b)
                        Toast.makeText(ConsumerDescAndEdit.this, "Data updated", Toast.LENGTH_SHORT).show();
                    else
                        Toast.makeText(ConsumerDescAndEdit.this, "Could not update data", Toast.LENGTH_SHORT).show();

                }
            }
        });
    }
}

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Попробуйте код ниже

public class CustomAdapter extends BaseAdapter {

    Context mContext;

    TextView nameView;
    TextView phoneNumberView;
    TextView accountView;

    String name;
    String phoneNumber;
    String accountNumber;

    ArrayList<Consumer> objects;
    private ItemClickListener itemClickListener;

    public interface ItemClickListener {
        void onItemClick(Consumer consumer);
    }


    public CustomAdapter(Context context, int resource, ArrayList<Consumer> objects, ItemClickListener itemClickListener) {
        this.objects = objects;
        this.mContext = context;
        this.itemClickListener = itemClickListener;
    }

    public CustomAdapter() {

    }

    @Override
    public int getCount() {
        return objects.size();
    }

    @Override
    public Object getItem(int position) {
        return objects.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final Consumer consumer = (Consumer) getItem(position);

        // Values to be displayed.

        name = consumer.getName();
        phoneNumber = consumer.getPhoneNumber();
        accountNumber = consumer.getAccountNumber();


        LayoutInflater inflater = LayoutInflater.from(mContext); // generate an inflater using context.
        convertView = inflater.inflate(R.layout.details_layout, null); // inflate details_layout and store it in convertView.

        nameView = convertView.findViewById(R.id.nameView);
        phoneNumberView = convertView.findViewById(R.id.phoneNumberView);
        accountView = convertView.findViewById(R.id.accountView);

        nameView.setText(name);
        phoneNumberView.setText(phoneNumber);
        accountView.setText(accountNumber);
        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (itemClickListener != null) {
                    itemClickListener.onItemClick(consumer);
                }

            }
        });
        return convertView;
    }

}

В Активности делайте следующее

public class ConsumerActivity extends AppCompatActivity implements CustomAdapter.ItemClickListener {
    CustomAdapter adapter;
    ArrayList<Consumer> objects;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_consumer);
        adapter = new CustomAdapter(this, objects, this);
    }

    @Override
    public void onItemClick(Consumer consumer) {
        Intent intent = new Intent(this, CustomerEdit.class);
        intent.putExtra("Consumer", consumer);
        startActivity(intent);
    }
}
0 голосов
/ 01 апреля 2019

Когда вы создаете Intent для редактирования Activity, добавьте данные из выбранного элемента как «дополнительные» к Intent, например:

Intent intent = new Intent(ShowAll.this,ConsumerDescAndEdit.class);
intent.putExtra("name", name);
intent.putExtra("phone", phone);
intent.putExtra("account", account);
startActivity(intent);

В редактировании Activity извлеките данные из Intent следующим образом:

String name = intent.getStringExtra("name");
String phone = intent.getStringExtra("phone");
String account = intent.getStringExtra("account");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...