Sparki
Sparki

Reputation: 161

Android dynamic onClick

first post please be gentle...

This code creates a table 10 x 10 full of hyphens in textviews simples...

With the onClickListner I need it to change the colour if the text of the one clicked.

it fails on tv.setTextColor(Color.RED);

can be sorted or is there a better way??

Thanks.

_Temp class:

public class _Temp extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.a_temp);


    TableLayout treeTable = (TableLayout) findViewById(R.id.main_table);

    // Add 10 Rows / 10 Cols ~~~~~~~~~~~~~~~~~~~~~~~~~~
    int idxCount = 0;

    for (int tree = 1; tree <= 10; tree++) {
        idxCount = 0;

        TableRow TableRows = new TableRow(this);
        TableRows.setId(tree * 100 + idxCount);
        TableRows.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        TableRows.setBackgroundColor(Color.LTGRAY);
        idxCount++;

        for (int bird = 1; bird <= 10; bird++) {
            TextView label_TableCols2 = new TextView(this);
            label_TableCols2.setId(tree * 100 + idxCount);
            label_TableCols2.setBackgroundColor(Color.DKGRAY);
            label_TableCols2.setClickable(true);
            label_TableCols2.setOnClickListener(this);

            label_TableCols2.setText("-");

            TableRows.addView(label_TableCols2); // add the column to the table row
            idxCount++;
        }
        treeTable.addView(TableRows, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    }
}

public void onClick(View v) {
    Log.i("scoreTable", "Something Clicked - ID = " + Integer.toString(v.getId()));

    int resId = getResources().getIdentifier(Integer.toString(v.getId()), "id", getPackageName());

    Log.i("scoreTable", "Colour Update 1 - resId = " + Integer.toString(resId));

    TextView tv = (TextView) findViewById(resId);

    Log.i("scoreTable", "Colour Update 2 - Just to see if it gets this far");

    tv.setTextColor(Color.RED);

    Log.i("scoreTable", "Colour Update 3 - Just to see if it gets this far");
}
}

and a_temp.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <HorizontalScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

                <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:orientation="vertical" >

            <TableLayout
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/main_table"
                android:layout_width="match_parent"
                android:layout_height="fill_parent" >

            </TableLayout>

        </LinearLayout>

    </HorizontalScrollView>

</ScrollView>

Edit: OK that was too easy... how about from an inflator!!

so, click an item in the table inflator popup, pick colour and click "Choose Colour" button, update colour of the hyphen clicked.

public void onClick(View v) {
    ((TextView) v).setTextColor(Color.RED); // <--- SWEET, WORKING

    AlertDialog.Builder PopUpBuilder = new AlertDialog.Builder(this);

    //...

    PopUpBuilder.setPositiveButton("Choose Colour", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {

            // Do stuff and store global variables

            updateTable();
        }
    });
    AlertDialog PopupDialog = PopUpBuilder.create();
    PopupDialog.show();
} 

public void updateTable() {

    TextView scoreTableTitle = (TextView) findViewById(R.id.textTitle1);
    scoreTableTitle.setText("woo woo"); // <--- WORKING

    ((TextView) v).setTextColor(Color.BLUE); // <--- ????           
}

Upvotes: 1

Views: 746

Answers (1)

Plumillon Forge
Plumillon Forge

Reputation: 1643

The clicked View is your TextView, so you just have to set his color on your listener :

public void onClick(View v) {
    ((TextView) v).setTextColor(Color.RED);
}

Upvotes: 3

Related Questions