Я пишу программу для Android. Моя программа имеет настраиваемый ListView. Теперь каждая строка списка содержит TextField и кнопку. Я хочу, чтобы текстовое поле реагировало, когда я нажимаю кнопку.Чтобы дать кнопку тег динамически/android
Это просто, когда жестко закодировано, но как это сделать динамически?
Мне кажется, для этого я должен иметь возможность назначать тег каждой кнопке и текстовому полю динамически, так что каждая кнопка имеет тот же тег, что и текстовое поле рядом с ним.
EDIT: Я не думаю, что это поможет любому, но вот то, что я пытался до сих пор, в первую XML-файлы:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res /android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.pris.ViewActivity"
tools:ignore="MergeRootFrame">
<TextView
android:id="@+id/tex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#0000ff"
android:text="@string/myText" />
<AutoCompleteTextView
android:id="@+id/textfield"
android:layout_width="200dip"
android:layout_height="wrap_content"
android:layout_below="@+id/tex"
android:completionThreshold="1"
android:inputType="text" />
<Button
android:id="@+id/but"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/suchen"
android:layout_below="@id/tex"
android:layout_toRightOf="@+id/textfield"
android:onClick="addToList"
android:layout_alignParentRight="true"
/>
<Button
android:id="@+id/but2"
android:layout_weight="1.0"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Liste löschen"
android:layout_below="@+id/but"
android:layout_alignParentRight="true"
android:onClick="removeList" />
<ListView
android:id="@android:id/list"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="1.0"
android:choiceMode="singleChoice"
android:layout_below="@+id/but2"></ListView>
и:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/Itemname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:paddingTop="5dp"/>
<Button
android:id="@+id/out"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:onClick="rem"
/>
Что касается javacode:
package com.example.pris;
//HauptView
public class ViewActivity extends ListActivity {
//Wirkstoffliste. Nötig für den Adapter fürs Autocomplete
private static final String[] MEDICATIONS = {"Indometacin", "Acemetacin", "Ketoprofen", "Phenylbutazon",
"Piroxicam", "Meloxicam", "Etoricoxib", "Pethidin", "Chinidin", "Flecainid", "Sotalol", "Digoxin",
"Nitrofurantoin", "Hydroxyzin", "Clemastin", "Dimetinden", "Chlorphenamin"
};
//Adapter für die ExpandableListView
private ArrayAdapter adap;
//Textfeld, in das der User seine Anfrage eingibt
private AutoCompleteTextView edit;
//der aktuelle Context
final Context con = this;
public int selectedItem = -1;
protected Object mActionMode;
private String chosen;
private List<String> meds = new ArrayList();
//Das passiert beim Betätigen des Searchbuttons:
//Es wird ein Asynctask erstellt, der abfragt, ob der Wirkstoff in der Liste vorkommt und dann entsprechend die Anzeige modelliert.
//Danach wird das Textfeld wieder auf Null gesetzt.
public void addToList(View view) {
System.out.println(view);
String str = "";
boolean here = false;
str = edit.getText().toString();
for (int i = 0; i < MEDICATIONS.length; i++)
if (MEDICATIONS[i].equals(str)) {
here = true;
boolean duplicate = false;
for (int j = 0; j < meds.size(); j++) {
if (meds.get(j).equals(str)) {
duplicate = true;
break;
}
}
if (!duplicate) {
// adap.add(str);
meds.add(str);
adap.notifyDataSetChanged();
View v = this.getListView();
System.out.println(v);
break;
}
if (!here){
Toast.makeText(ViewActivity.this, "Bitte geben Sie einen anderen Wirkstoff ein", Toast.LENGTH_SHORT).show();
}
edit.setText(null);
}}
public void rem(View view){
}
//Entfernt bei Anklicken von "Liste löschen" die gesamte Liste
public void removeList(View view) {
meds.clear();
adap.clear();
adap.notifyDataSetChanged();
}
@Override
//OnCreate. Die View wird ans xml gebunden und weitere Methoden ausgelöst.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view);
adap = new ArrayAdapter<String>(
this, R.layout.mylist,
R.id.Itemname, meds);
this.setListAdapter(adap);
// adap = new ArrayAdapter<String>(ViewActivity.this, android.R.layout.simple_list_item_activated_1);
if (getIntent().getExtras()!= null){
System.out.println("not null");
Bundle bundle = getIntent().getExtras();
int i;
String str;
for (i = 0; i< bundle.size(); i++){
System.out.println(i);
System.out.println(bundle);
System.out.println(bundle.keySet());
str = bundle.getString(String.valueOf(i));
meds.add(str);
adap.add(str);
}
/* if (i==0){
meds.clear();
adap.clear();
}
*/}
else
{System.out.println(" null");}
setAutocomplete();
//setExpandList();
}
}
Как вы можете видеть, у меня есть Listview с динамически сгенерированными кнопками - теперь как я могу обратиться к одному из них, скажем, четвертому или пятому или шестнадцатому?
Там должна быть некоторая возможность, но это чертовски трудно найти
сообщение, что вы уже пробовали –
Я все еще озадачен проблемой КАК получить доступ к компоненту listviews. Я могу, конечно, разместить свои xml-файлы, а также свою активность в отношении взгляда, но я до сих пор не просил TRIED получить доступ к кнопке в списке, если бы я знал, как это сделать, я бы не спросил здесь. – user1862770