如何在Androiod中为动态生成的动态数量的textview生成onclick监听器?

时间:2016-10-11 05:53:04

标签: android

我有桌子'笔记'有N个音符。对于每个笔记,我想打印标题'的标题。我在动态创建的单独textview中的列。因此,对于N笔记,我将有N个文本视图。 现在,每当用户点击任何textView时,我想显示该行中具有所点击标题的所有其他数据。

问题:当我对这些动态创建的文本视图使用onClickListener时,以及当用户点击任何textview时,它总是生成最后一行(或最后一个动态创建的textview)的数据< / H2>
public void dataview(){
    //onView is a userdefined function which simply executes a select query 
    Cursor res=db.onView();
    len=res.getCount();

    //below code is, If no notes stored in the table.
    if(res.getCount()==0)
    {
        Toast.makeText(ViewActivity.this,"No Notes.",Toast.LENGTH_SHORT).show();
        return;
    }

    //parsing the select query result using the Cursor res
    while(res.moveToNext()) {
        relative = (LinearLayout) findViewById(R.id.activity_view);
        relative.addView(createNewTextView(res.getString(1).toString()));
    }
}

public TextView createNewTextView(String text){
    final LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    lparams.setMargins(0,10,0,0);

    //creating TextView and assigning properties here
    textView = new TextView(this);
    textView.setLayoutParams(lparams);
    textView.setText(text);
    index++;
    textView.setTextSize(18);
    textView.setBackgroundColor(Color.parseColor("#ff0099cc"));

    // onClick Action here
    final String title=textView.getText().toString();
    textView.setOnClickListener(
                    new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Cursor res1=db.onView();
                            while(res1.moveToNext()){
                                if(res1.getString(1).equals(title));
                                {
                                    final String text1=res1.getString(0);
                                    Intent i=new Intent("com.example.dell.todolister.ViewNoteActivity");
                                    i.putExtra("TextBox1",text1);
                                    startActivity(i);
                                    break;
                                }
                            }
                        }
                    }
            );
    return textView;
}

3 个答案:

答案 0 :(得分:1)

我认为您需要为文本视图提供ID。

初始化全局变量,如int i = 1;

然后在createNewTextView中,textView.setId(i)

在返回视图增量之前的结尾i = i + 1;

因此,对于下一个textView,您将拥有不同的文本视图ID。

答案 1 :(得分:0)

你应该使用id识别textview来显示文本,使用它 - &gt; v.getid()内的onclick(View v)

答案 2 :(得分:0)

我花了24个小时来找到这个问题的解决方案,认为这个问题与一些特定于侦听器的逻辑有关。

但问题是血腥的Semicoln&#39;&#39;在这一行造成了所有问题

Backbone.Relational.store._collections.forEach(function each(collection) {
    collection.reset();
});