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として入力されます。しかし、TextViewのいずれかをクリックしても、onClickメソッドはトリガーされません。ログを使って確認しました。

ありがとうございました。

4

4 に答える 4

9

登録 onClickListenerしていないTextViewsため、 TextViews は Clicked イベントを取得していません。

このためには、次のようなことをしなければなりません。

onCreate()
{


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

より良い解決策:

アクティビティの xml レイアウト ファイルで、

あなたのall TextViewput属性にandroid:onClick="textClick"

アクティビティから onClickListener を削除して、次のように記述します。

public void textClick(View TextView)

あなたの活動で。次に、すべての TextView に対して onClicklistener を登録する必要はありません。Androidはあなたのためにそれ自体を行います..

于 2012-08-15T10:39:20.983 に答える
3

これは、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
    }

}
于 2012-08-15T10:40:42.550 に答える
1

これは、を使用していないために発生setOnClickListener()しますTextViews

于 2012-08-15T10:40:36.747 に答える