onClickListener无法在我的活动中工作

时间:2012-08-15 10:31:33

标签: android onclick

我的布局有13个TextViews,点击后会改变ListView项目。

这是我的活动:

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");
        }
        }
    }
}

当我启动应用程序时,listView被填充为item1。但是当我单击任何TextView时,不会触发onClick方法。我用日志检查了它。

谢谢。

4 个答案:

答案 0 :(得分:7)

因为您<{1>} 未注册 onClickListener因此您的TextView未获得Clicked事件。

为此,你必须做类似的事情,

TextViews

更好的解决方案:

在Activity的xml布局文件中,

在您的所有onCreate() { TextView tv1 = (TextVIew)findViewById(R.id.tv1); tv1.setOnClickListener(this); 放置属性TextView

现在从您的Activity中删除onClickListener,然后编写

android:onClick="textClick"

在你的活动中。然后,您不必为所有TextView注册onClicklistener。 Android为你自己做.. ..

答案 1 :(得分:2)

这是使用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
    }

}

答案 2 :(得分:1)

这是因为您没有将setOnClickListener()用于TextViews

答案 3 :(得分:0)

在您的活动类中添加此静态函数,这在我的 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);
 }

}