2012-08-15 144 views
2

我的布局有13个TextViews,点击更改ListView项目。onClickListener不工作在我的活动

这里是我的活动:

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

当我启动应用程序列表视图填充的物品1。但是当我点击任何TextView时,onClick方法不会被触发。我使用日志来检查它。

谢谢。

+1

的textviews被填充的列表视图提供了一个示例程序。 尝试使用setOnItemClickListener这个 – 2012-08-15 10:34:45

+0

我有不同于ListView的TextViews。它们就像布局顶部的选项卡按钮,位于ListView上方 – 2012-08-15 10:36:22

+0

因此,设计就像在顶部的textviews和下面的listView一样。 和现在textView onclicks不工作? 你使用setOnclickListener的TextViews? – 2012-08-15 10:39:09

回答

7

因为你是没有注册onClickListener与你的TextViews因此你的TextViews没有得到点击事件。

对于这一点,你必须这样做,

onCreate() 
{ 


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

更好的解决方案:

在你活动的XML布局文件,

在所有 TextView

属性android:onClick="textClick"

现在从您的活动中删除onClickListener,并只写入

public void textClick(View TextView) 

在您的活动。那么你不必为所有的TextView注册onClicklistener。 Android为本身你..

1

出现这种情况是因为你不使用setOnClickListener()TextViews

2

这是当你使用工具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 
    } 

}