Archie.bpgc
Archie.bpgc

Reputation: 24012

onClickListener not working in my activity

My layout has 13 TextViews which on click changes the ListView Items.

Here is my activity:

public class ExampleActivity extends ListActivity implements
        OnClickListener {

    private String[] sa = new String[100];
    private ListView lv;
    private Context context = this;
    private ArrayAdapter adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        new LongOperation().execute("1");
        lv = getListView();
    }

    private class LongOperation extends AsyncTask<String, Void, String> {

        private ProgressDialog dialog = new ProgressDialog(
                ExampleActivity.this);

        @Override
        protected String doInBackground(String... params) {

            int i = Integer.parseInt(params[0]);
            for (int n = 0; n < 100; n++) {
                if (i != 5 && i != 10) {
                    sa[n] = "Item" + i;
                } else {

                }
            }
            return params[0];
        }
        @Override
        protected void onPostExecute(String result) {

            adapter = new ArrayAdapter<Object>(context,
                    android.R.layout.simple_list_item_1, sa);
            lv.setAdapter(adapter);
            this.dialog.dismiss();
        }
        @Override
        protected void onPreExecute() {

            this.dialog.setMessage("Please wait");
            this.dialog.show();
        }
        @Override
        protected void onProgressUpdate(Void... values) {

        }
    }
    public void onClick(View v) {

        Log.d("onClick", v.getId() + "**");
        int id = v.getId();

        switch (id) {

        case R.id.tv1: {

            new LongOperation().execute("1");
        }
        case R.id.tv2: {

            new LongOperation().execute("2");
        }
        case R.id.tv3: {

            new LongOperation().execute("3");
        }
        case R.id.tv4: {

            new LongOperation().execute("4");
        }
        case R.id.tv5: {

            new LongOperation().execute("5");
        }
        case R.id.tv6: {

            new LongOperation().execute("6");
        }
        case R.id.tv7: {

            new LongOperation().execute("7");
        }
        case R.id.tv8: {

            new LongOperation().execute("8");
        }
        case R.id.tv9: {

            new LongOperation().execute("9");
        }
        case R.id.tv10: {

            new LongOperation().execute("10");
        }
        case R.id.tv11: {

            new LongOperation().execute("11");
        }
        case R.id.tv12: {

            new LongOperation().execute("12");
        }
        case R.id.tv13: {

            new LongOperation().execute("13");
        }
        }
    }
}

the listView is populated as item1 when i launch the app. but when i click on any of the TextViews, the onClick method is not triggered. i checked it using a Log.

Thank You.

Upvotes: 3

Views: 3225

Answers (4)

Lahiru Liyanage
Lahiru Liyanage

Reputation: 75

Add this static function in your activity class, This work for me in my MainActivity.java

public class MainActivity extends AppCompatActivity {
 static {
  AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
 }

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

}

Upvotes: 0

user370305
user370305

Reputation: 109237

Because you are not registering onClickListener with your TextViews hence your TextViews are not getting Clicked event.

For this you have to do something like,

onCreate()
{


 TextView tv1 = (TextVIew)findViewById(R.id.tv1);
 tv1.setOnClickListener(this);

Better Solution:

In your Activity's xml Layout File,

in your all TextView put attribute android:onClick="textClick"

Now remove onClickListener from your Activity and just write

public void textClick(View TextView)

in your activity. Then you don't have to register onClicklistener for all TextView. Android does itself for you..

Upvotes: 9

Vinay
Vinay

Reputation: 6881

This is a sample program provided when you use implements OnClickListener

public class ExampleActivity extends Activity implements OnClickListener {
    protected void onCreate(Bundle savedValues) {

        Button button = (Button)findViewById(R.id.corky);
        button.setOnClickListener(this);  // have a look on this line. registering.
    }

    // Implement the OnClickListener callback
    public void onClick(View v) {
      // do something when the button is clicked
    }

}

Upvotes: 3

A. AMAIDI
A. AMAIDI

Reputation: 6849

this happens because you not using the setOnClickListener() for your TextViews

Upvotes: 1

Related Questions