2013-06-21 87 views
1

我從this site下載了一個自定義表格。 我想顯示單擊單元格的值。Event TableFixHeader

TableFixHeaders table = (TableFixHeaders) findViewById(R.id.table_1); 
table.setAdapter(new MyAdapter(this)); 
table.setOnLongClickListener(new OnLongClickListener(){ 
     @Override 
    public boolean onLongClick(View v) { 
     TextView Cl = (TextView) table.getChildAt(1); 
     Toast.makeText(this, Cl.getText().toString(), Toast.LENGTH_LONG).show(); 
       return false; 
     } 
}); 

問題是我不能截取我主要活動中的任何事件。

回答

0

我也用滾動的列和行下載了這個非常漂亮的小部件。而且我還需要在某個單元格上點擊一個響應。它沒來,但我在這裏找到了原因:
TableFixHeaders.java,模塊OnTouchEvent(MotionEvent event)在開始加入這一行:

super.onTouchEvent(event); 

這個調用將確保其他觸摸方法被調用!所以它也應該適用於longclicks!
當convertView被第一次充氣時,我已經將模塊GetView(int row, int column, View convertView, ViewGroup parent)中的點擊處理程序添加到了特定視圖(單元格)。然後我可以有不同的處理程序不同的單元格(列標題,數據單元格等)。

0

下面是詳細代碼:

 private View getBody(final int row,final int column, View convertView, ViewGroup parent) { 
      if (convertView == null) { 
       convertView = getLayoutInflater().inflate(R.layout.item_table, parent, false); 
      } 
     /*if(row == 8){ 
      convertView.setBackgroundResource(R.color.row8); //if row8 need different colour 
     }*/else { 
       //Change table color using bg_table_col 
       convertView.setBackgroundResource(row % 2 == 0 ? R.drawable.bg_table_color1 : R.drawable.bg_table_color2); 
      } 
      ((TextView) convertView.findViewById(android.R.id.text1)).setText(records.get(row).getItem(column + 1)); 
      convertView.setOnLongClickListener(new View.OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View v) { 
        detailsearchPaperID = records.get(row).getItem(0); 
        final String S; 
        S = detailsearchPaperID + " : " + records.get(row).getItem(column + 1); 
        Log.d(TAG, S); 
        Toast.makeText(getApplicationContext(), S, Toast.LENGTH_SHORT).show(); 
        //... 
        // we will not start intent here but after performing search 
        return true; 
       } 
      }); 

      return convertView; 
     } 

如果添加監聽器在以前的帖子(當convertView充氣第一次)解釋說,這將工作只在第一個視圖,執行任何滾動前。

即使您執行了滾動操作,我的代碼也能正常工作。當然,你需要添加

super.onTouchEvent(event); 

如前所述

0

我使用這個wrapper for InqBarna's library

這是如何實現表格主體上的點擊事件的代碼片段。 你可以看到更詳細的examples here

TableFixHeaderAdapter.ClickListener<List<String>, BasicCellViewGroup> clickListenerBody = new TableFixHeaderAdapter.ClickListener<List<String>, BasicCellViewGroup>() { 
     @Override 
     public void onClickItem(List<String> array, BasicCellViewGroup viewGroup, int row, int column) { 
      viewGroup.vg_root.setBackgroundColor(ContextCompat.getColor(context, R.color.colorYellow)); 
      Snackbar.make(viewGroup, "Click on " + viewGroup.textView.getText() + " (" + row + "," + column + ")", Snackbar.LENGTH_SHORT).show(); 
     } 
    }; 

等的表格單元格的其餘部分:

adapter.setClickListenerFirstHeader(clickListenerHeader); 
    adapter.setLongClickListenerFirstHeader(longClickListenerHeader); 
    adapter.setClickListenerHeader(clickListenerHeader); 
    adapter.setLongClickListenerHeader(longClickListenerHeader); 
    adapter.setClickListenerFirstBody(clickListenerBody); 
    adapter.setLongClickListenerFirstBody(longClickListenerBody); 
    adapter.setClickListenerBody(clickListenerBody); 
    adapter.setLongClickListenerBody(longClickListenerBody); 
    adapter.setClickListenerSection(clickListenerBody); 
    adapter.setLongClickListenerSection(longClickListenerBody); 

希望它可以幫助你。