總網頁瀏覽量

關於我自己

我的相片
人生的必修課是接受無常,人生的選修課是放下執著。

2012年3月25日 星期日

[HorizontalScrollView] 水平滾動無螢寬限制>> Rename/New/Delete 行為

承上一篇的code
[HorizontalScrollView] 水平滾動無螢寬限制>>增加Focus與Click行為

< 定義於.java >
1. 預設TableRow包含6個TextView
2. 在此想讓user按下畫面中的Button後, 能無限增加水平列的widget, 即使會超出螢寬
3. 增加onClick()與onFocusChange()行為
4. 重新命名/新增/刪除

./src/com.tsots.Hori_malloc/Hori_malloc_FC.java (改寫如下)
public class Activity_Hori_malloc extends Activity
{
    Context context = Activity_Hori_malloc.this;
    HorizontalScrollView scrollView;
    TableRow row;
    TextView tv1, tv2, tv3, tv4, tv5, tv6;
    TextView[] array_tv = {tv1, tv2, tv3, tv4, tv5, tv6};
    int categoryPresent = 1;
    int rowChildCount = 6;
    int newrowChild = 0;
    final int ID_RENAME = 0;
    final int ID_NEW = 1;
    final int ID_DELETE = 2;
   
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
              
        scrollView = (HorizontalScrollView) findViewById(R.id.scrollView);
        row = (TableRow) scrollView.findViewById(R.id.row);
       
        // 一開啟AP需要看到6個TextView, 即是做初始化設定
        funInitTableItem();
    }
    
    //[初始化]設定TextView的格式
    public void funInitTableItem()
    {
        for(int i=0 ; i<rowChildCount ; i++)
        {
            array_tv[i]= new TextView(context);
            array_tv[i].setText("text"+(i+1));
            array_tv[i].setHeight(80);
            array_tv[i].setWidth(280);
            array_tv[i].setGravity(Gravity.CENTER);
            array_tv[i].setTextSize(60);               
            array_tv[i].setFocusable(true);
            array_tv[i].setFocusableInTouchMode(true);
            array_tv[i].setBackgroundResource(R.drawable.selector_app_category);
            row.addView(array_tv[i]);
        }       
        funInitFocusAction();
    }

    //[初始化]設定TextView的Focus及Click行為
    public void funInitFocusAction()
    {
        for(int i=0 ; i<rowChildCount ; i++)
        {        
            final int ii = i;
            array_tv[i].setOnFocusChangeListener(new OnFocusChangeListener()
            {
                @Override
                public void onFocusChange(View v, boolean hasFocus)
                {               
                    if(hasFocus == true)
                    {
                        categoryPresent = ii+1;
                        Toast.makeText(context, "focus "+array_tv[ii].getText().toString(), Toast.LENGTH_SHORT).show();
                    }
                }           
            });
            array_tv[i].setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    categoryPresent = ii+1;
                    Toast.makeText(context, "tvs click "+categoryPresent, Toast.LENGTH_SHORT).show();
                    funDialog(array_tv[ii]);
                }              
            });                           
        }
    }
   
    //[新項目]設定TextView的格式
    public void funNewTableItem()
    {
        final TextView tv = new TextView(context);
        newrowChild++;
        tv.setText("Newtext"+newrowChild);
        tv.setHeight(80);
        tv.setWidth(280);
        tv.setGravity(Gravity.CENTER);
        tv.setTextSize(60);               
        tv.setFocusable(true);
        tv.setFocusableInTouchMode(true);
        tv.setBackgroundResource(R.drawable.selector_app_category);
        row.addView(tv);
       
        funNewFocusAction(tv);   
    }

    //[新項目]設定TextView的Focus及Click行為
    public void funNewFocusAction(final TextView textview)
    {
        textview.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Toast.makeText(context, "click "+textview.getText().toString(), Toast.LENGTH_SHORT).show();       
                funDialog(textview);
            }              
        });
        textview.setOnFocusChangeListener(new OnFocusChangeListener()
        {
            @Override
            public void onFocusChange(View v, boolean hasFocus)
            {               
                if(hasFocus == true)
                {
                    Toast.makeText(context, "focus "+textview.getText().toString(), Toast.LENGTH_SHORT).show();
                }
            }           
        });
    }
   
    //建立Dialog

    public void funDialog(final TextView textview)
    {
        AlertDialog.Builder AB = new AlertDialog.Builder(context);                   
       
        DialogInterface.OnClickListener DIO = new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialog, int which)
            {
                switch(which)
                {
                    case ID_RENAME:     //int ID_RENAME = 0;

                        textview.setText("rename");
                        break;
                    case ID_NEW:           //int ID_NEW = 1;

                        funNewTableItem();
                        break;
                    case ID_DELETE:     //int ID_DELETE = 2;

                        funDeleteTableItem(row.indexOfChild(textview));
                        break;
                }
            }                       
        };
       
        String[] items = {"Rename", "New", "Delete"};
        AB.setItems(items, DIO);
        AB.show();
    }

    public void funDeleteTableItem(int index)
    {
        // index = row.indexOfChild(textview)
        row.removeViewAt(index);
        //表示TableRow內含的widget數量-1
        rowChildCount--;       
    }
}

沒有留言:

張貼留言