如何设置不同的操作dynamiclly在Android上创建的按钮(特别是 - 使用动态按钮自动滚动

2019-10-19 01:57发布

我创建包含多个文本视图的布局。 我在一个ArrayList被称为_resultId类变量保存的文本视图的标识。

现在我想创造出想滚动到正确的文本视图(第一个按钮,第一个文本视图等)按钮

问题是:如何将正确的ID传递给每对压法的按钮?

我尝试使用全局变量_counter但是当我运行该程序的所有按钮滚动到最后文本视图

该方法的代码:

private void addNavigationView(ViewGroup navigationLayout, ArrayList<Perek> mishnayot) 
{
    for (int i=0;i<mishnayot.size();i++)
    {
        _counter=i;
        String currentOt=mishnayot.get(i).getOt();
        Button button = new Button(getBaseContext());
        button.setText(currentOt);
        if (_resultId==null)
            throw new IllegalAccessError("missing result id link cannot be created");
        button.setOnClickListener(new OnClickListener() 
        {

            @Override
            public void onClick(View arg0) //make it scroll to correct textview
            {
                 new Handler().post(new Runnable() 
                 {
                     @Override
                     public void run() 
                     {
                         View currentView=findViewById(_resultId.get(_counter));
                         ScrollView scrollView=(ScrollView) findViewById(R.id.resultScroll);
                         scrollView.scrollTo(0, currentView.getTop());
                     }
                 });
            }
        });
         navigationLayout.addView(button);//add the button to panel
    }
    navigationLayout.setVisibility(View.VISIBLE);
}

Answer 1:

了解更多Runnable接口上后,我找到了答案,从而为那些谁将会类似的东西挣扎:你需要完全实现可运行都和OnClickListener创建一个新类。

这个类将包含额外的数据和构造,以满足您的需求。 当您设置按钮的onclick方法,你创建该类的一个新对象。 例如在我的情况下,新方法看起来像:

public class ButtonHandler implements OnClickListener,Runnable 
{
private String _data;//data to be passed for the button
private ArrayList<Integer> _resultId;//the id's of the text views
private Activity _activity;

public ButtonHandler(String data,ArrayList<Integer> resultId,Activity activity)
{
    _data=data;
    _resultId=resultId;
    _activity=activity;
}

@Override
public void run() 
{
     View currentView=_activity.findViewById(_resultId.get(Integer.valueOf(_data)));
     ScrollView scrollView=(ScrollView) _activity.findViewById(R.id.resultScroll);
     scrollView.scrollTo(0, currentView.getTop());

}

@Override
public void onClick(View v) 
{
    new Handler().post(this);

}

}

现在,从我使用的主要活动称之为:

    private void addNavigationView(ViewGroup navigationLayout, ArrayList<Perek> mishnayot) 
{
    for (int i=0;i<mishnayot.size();i++)
    {
        _counter=i;
        String currentOt=mishnayot.get(i).getOt();
        Button button = new Button(getBaseContext());
        button.setText(currentOt);
        if (_resultId==null)
            throw new IllegalAccessError("missing result id link cannot be created");
        button.setOnClickListener(new ButtonHandler(i+"",_resultId,this));

        navigationLayout.addView(button);//add the button to panel
    }
    navigationLayout.setVisibility(View.VISIBLE);
}


文章来源: how to set different actions to dynamiclly created button on android (specifically - auto scroll to a textview using a dynamic button)