YayCoding
YayCoding

Reputation: 55

How to get index at which TableRow is at in a TableLayout?

So I'm currently creating a little reminders app, you create your reminder, it adds to a TableRow to a TableLayout, which is the child of a ScrollView. Everything is pretty basic.

What I wanted to do is when I add the TableRow to the TableLayout with LayoutInflater, how do I set a tag on that TableRow, and how would I get the information stored in that TableLayout later in my code?

Current Code:

public class MainActivity extends ActionBarActivity {

    private TableLayout reminderTableScrollView;

    Button deleteReminderButton;

    Toast remindersToast;


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

        reminderTableScrollView = (TableLayout) findViewById(R.id.reminderTableScrollView);

        deleteReminderButton = (Button) findViewById(R.id.deleteButton);
        deleteReminderButton.setOnClickListener(deleteClickListener);
    }

    private void goToEnterData() {
        Intent intent = new Intent(this, ReminderData.class);
        startActivityForResult(intent, 1);
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent returnIntent) {

        if (requestCode == 1) {
            if(resultCode == RESULT_OK){
                String title = returnIntent.getStringExtra("title");
                String description = returnIntent.getStringExtra("description");
                String hour = returnIntent.getStringExtra("hour");
                String minute = returnIntent.getStringExtra("minute");
                String amPm = returnIntent.getStringExtra("amPm");

                Log.d("Debug", String.valueOf(list));
                Log.d("Debug", hour + ":" + minute);

                inflate(title, description, hour, minute, amPm);
            }
            if (resultCode == RESULT_CANCELED) {
                displayToast(new Toast(this), "Reminder canceled");
            }
        }
    }

    private void inflate(String text, String description, String hour, String minute, String amPm) {
        LayoutInflater inflator = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View reminder = inflator.inflate(R.layout.reminder_layout, null);

        TextView reminderListTextView = (TextView) reminder.findViewById(R.id.reminderListTextView);
        reminderListTextView.setText(text);

        TextView reminderListTimeTextView = (TextView) reminder.findViewById(R.id.timeTextView);
        reminderListTimeTextView.setText(hour + ":" + minute + ((amPm == "0") ? " AM" : " PM"));

        reminderTableScrollView.addView(reminder);

        Log.d("Debug", String.valueOf(reminderTableScrollView.getTag(0)));
    }

ReminderData.java

public class ReminderData extends ActionBarActivity implements OnClickListener {

    EditText titleEditText;
    EditText descriptionEditText;
    EditText hourTimeEditText;
    EditText minuteTimeEditText;

    Spinner spinner;

    Button enterButton;

    Toast toast;

    SQLiteDatabase myDB;

    String title;
    String description;

    int spinnerPosition;

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

        titleEditText = (EditText) findViewById(R.id.titleEditText);
        descriptionEditText = (EditText) findViewById(R.id.descriptionEditText); 

        hourTimeEditText = (EditText) findViewById(R.id.hourTimeEditText);
        minuteTimeEditText = (EditText) findViewById(R.id.minuteTimeEditText);

        spinner = (Spinner) findViewById(R.id.ampm_spinner);
        spinner.setOnItemSelectedListener(spinnerItemSelectedListener);

        enterButton = (Button) findViewById(R.id.enterButton);
        enterButton.setOnClickListener(this);
    }

    private OnItemSelectedListener spinnerItemSelectedListener = new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int position, long id) {
            spinnerPosition = position;
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    };

    private void returnData(String titleString, String descriptionString, String hour, String minute, String amPm) {
        Intent returnIntent = new Intent();
        returnIntent.putExtra("title", titleString);
        returnIntent.putExtra("description", descriptionString);
        returnIntent.putExtra("hour", hour);
        returnIntent.putExtra("minute", minute);
        returnIntent.putExtra("amPm", amPm);

        setResult(RESULT_OK, returnIntent);
        finish();
    }

Sorry for the massive jumbles of code, usually I try to keep it short and people ask for more code

Edit: I removed the unnecessary coding

Upvotes: 0

Views: 1618

Answers (1)

Lei Guo
Lei Guo

Reputation: 2550

What I wanted to do is when I add the TableRow to the TableLayout with LayoutInflater, how do I set a tag on that TableRow, and how would I get the information stored in that TableLayout later in my code?

You can set the index of a TableRow as the tag to it. Doing like this in your inflate(String text, String description, String hour, String minute, String amPm) method:

int index = reminderTableScrollView.getChildCount();
reminder.setTag(index);
reminderTableScrollView.addView(reminder);

And then retrieve the index like this:

int index = (Integer)reminder.getTag();

Update:

According to your comment, what you want can be achieved by setting an OnClickListener to each TableRow like this:

    int index = reminderTableScrollView.getChildCount();
    reminder.setTag(index);
    reminder.setOnClickListener(new OnClickListener(){
        public void onClick(View v){
            // The View you get here is actually the reminder
            int index = (Integer)reminder.getTag();
            // Now you have the index, you can do what you want.
        }
    });
    reminderTableScrollView.addView(reminder);

Upvotes: 1

Related Questions