3

我的布局有 13 个 TextView,点击后会更改 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。但是当我单击任何 TextViews 时,不会触发 onClick 方法。我使用日志检查了它。

谢谢你。

4

4 回答 4

9

因为您没有注册 onClickListenerTextViews因此您的 TextViews 没有收到 Clicked 事件。

为此,您必须执行以下操作,

onCreate()
{


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

更好的解决方案:

在 Activity 的 xml 布局文件中,

在你所有的TextViewput 属性中android:onClick="textClick"

现在从您的活动中删除 onClickListener 并编写

public void textClick(View TextView)

在你的活动中。那么你就不必为所有的TextView注册onClicklistener了。Android为你做自己..

于 2012-08-15T10:39:20.983 回答
3

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

}
于 2012-08-15T10:40:42.550 回答
1

发生这种情况是因为您没有setOnClickListener()使用TextViews

于 2012-08-15T10:40:36.747 回答
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);
 }

}
于 2019-12-10T10:40:18.910 回答