Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android上为动态创建的按钮设置不同的操作(特别是-使用动态按钮自动滚动到文本视图)_Java_Android_Button_Scroll_Onclick - Fatal编程技术网

Java 如何在android上为动态创建的按钮设置不同的操作(特别是-使用动态按钮自动滚动到文本视图)

Java 如何在android上为动态创建的按钮设置不同的操作(特别是-使用动态按钮自动滚动到文本视图),java,android,button,scroll,onclick,Java,Android,Button,Scroll,Onclick,我创建了一个包含多个文本视图的布局。 我将文本视图的ID保存在一个名为_resultId的类变量ArrayList中 现在我想创建一些按钮,这些按钮可以滚动到正确的文本视图 (第一个文本视图的第一个按钮等) 问题是:如何将正确的id传递给按下方法的每个按钮 我尝试使用全局变量计数器,但当我运行程序时,所有按钮都会滚动到最后一个文本视图 方法代码: private void addNavigationView(ViewGroup navigationLayout, ArrayList<Per

我创建了一个包含多个文本视图的布局。 我将文本视图的ID保存在一个名为_resultId的类变量ArrayList中

现在我想创建一些按钮,这些按钮可以滚动到正确的文本视图 (第一个文本视图的第一个按钮等)

问题是:如何将正确的id传递给按下方法的每个按钮

我尝试使用全局变量计数器,但当我运行程序时,所有按钮都会滚动到最后一个文本视图

方法代码:

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);
}
private void addNavigationView(视图组navigationLayout,ArrayList mishnayot)
{

对于(int i=0;i在了解了更多关于Runnable接口的内容后,我找到了一个答案,对于那些将在类似问题上挣扎的人: 您需要创建一个同时实现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);

}

}
公共类ButtonHandler实现OnClickListener,可运行
{
私有字符串_data;//要为按钮传递的数据
private ArrayList _resultId;//文本视图的id
私人活动;
公共按钮句柄(字符串数据、ArrayList结果、活动)
{
_数据=数据;
_resultId=resultId;
_活动=活动;
}
@凌驾
公开募捐
{
View currentView=_activity.findViewById(_resultId.get(Integer.valueOf(_data));
ScrollView ScrollView=(ScrollView)\ u activity.findViewById(R.id.resultScroll);
scrollView.scrollTo(0,currentView.getTop());
}
@凌驾
公共void onClick(视图v)
{
新处理程序().post(此);
}
}
现在从我使用的主要活动中调用它:

    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);
}
private void addNavigationView(视图组navigationLayout,ArrayList mishnayot)
{
对于(int i=0;i