2016-12-01 75 views
-2

所以我有一個主要活動:使線性佈局行可點擊

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> 

我希望能夠在每一行和調用函數。
現在,您可以看到我爲佈局設置了「可點擊」和「點擊」。但是這會調用相同的函數,現在問題我點擊哪一行,對吧?
我想要的是單擊每一行,並根據此行中設置的文本使用不同的參數調用相同的函數。

回答

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); 
0

不要設置android:onClick="stufftocall"layout.xml

一套它在你的java文件等作爲波紋管

假設電視[i]是你行。

tv[i].setOnClickListener(new OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
     // call your desired method with different values here 

    } 
});