使线性布局中的行可单击

时间:2016-12-01 10:28:08

标签: android android-linearlayout textview

所以我有一个主要活动:

public class MainActivity extends AppCompatActivity {
    static DBhelper myDB;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myDB=new DBhelper(this);
        //myDB.access_token(93588930);
    }

    @Override
    public void onResume() {
        super.onResume();
        LinearLayout ll= (LinearLayout) findViewById(R.id.char_layout);
        if(( ll).getChildCount() > 0)
            ( ll).removeAllViews();

        JSONArray chars=myDB.get_all_chars();
        TextView[] tv= new TextView[chars.length()];

        for (int i = 0; i < chars.length(); i++) {
            try {
                tv[i] = new TextView(this);
                JSONObject c = (JSONObject) chars.get(i);
                tv[i].setText(c.getString("name")+"\n"+c.getString("id"));
                ll.addView(tv[i]);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
}

使用以下xml:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    tools:context="com.jbs.evecompanion.MainActivity"
    android:columnCount = "1">

    <LinearLayout
        android:orientation="vertical"
        android:id="@+id/char_layout"
        android:clickable="true"
        android:onClick="stufftocall"/>
</GridLayout>

我希望能够在每一行上调用一个函数 现在,你可以看到我为布局设置了“clickable”和“onclick”。但是这会调用相同的函数,现在我点击哪一行,对吧? 我想要的是单击每一行并使用不同的参数调用相同的函数,具体取决于此行中设置的文本。

2 个答案:

答案 0 :(得分:0)

请勿在{{1​​}}

中设置android:onClick="stufftocall"

将其设置在您的java文件中,如下面的

假设tv [i]是你的行。

layout.xml

答案 1 :(得分:0)

您可以使用setTag()getTag()方法。

创建一个侦听器:

mListener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d(TAG,"Clicked on "+v.getTag());
    }
};

为所有textViews分配一个标签,并将此监听器添加到每个标签:

tv[i].setTag(i);
tv[i].setOnClickListener(mListener);