如何为 android 的 ListView 中的按钮添加 OnClick()?
How to add OnClick() for buttons in ListView of android?
这是我的 app.When 点击新按钮,它会一个接一个地显示问题,如果我们点击选项(A、B、C、D),我应该会显示正确的或 incorrect.For 个问题我做了编码,现在建议我选择。
我在 xml 文件中有 5 个文本视图和 4 个按钮,这些数据是从数据库中填充的,所以我使用了 ListView 并且 SimpleCursorAdapter.It 一切正常 fine.Now 我想编写 OnClick 函数对于 Xml file.I 中的按钮,无法添加 SetOnClickListener,因为它显示错误 "Couldnt fine the resource id" 它显示为按钮在不同的 xml 中可用。
如何为这些按钮分配 OnClick()?
SQLiteDatabase db;
Cursor c1;
Button b1;
String from[] = {"_id", "optn1", "optn2", "optn3", "optn4", "ab"};
int[] to = {R.id.textView3, R.id.textView5, R.id.textView6, R.id.textView7, R.id.textView8, R.id.textView10};
int i = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db.execSQL("CREATE TABLE ques(_id TEXT,optn1 TEXT ,optn2 TEXT,optn3 TEXT,optn4 TEXT,qno INTEGER,ab INTEGER)");
t1 = (TextView) findViewById(R.id.textView4);
t2 = (TextView) findViewById(R.id.textView9);
b1 = (Button) findViewById(R.id.button);
b1.setOnClickListener(this);
}
public void onClick(View v) {//this onclick is to display the texts only if the button is clicked not as soon as the app is executed
if (v == b1) {
db = openOrCreateDatabase("quiz1.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);
if (c1 != null) {
i = c1.getInt(c1.getColumnIndex("qno"));
}
c1 = db.rawQuery("SELECT * FROM ques WHERE qno>'" + i + "' ORDER BY qno LIMIT 1", null);
SimpleCursorAdapter sca = new SimpleCursorAdapter(MainActivity.this, R.layout.compo_list, c1, from, to);
ListView l1 = (ListView) findViewById(R.id.listView);
l1.setAdapter(sca);
sca.changeCursor(c1);
t1.setText(String.valueOf(i));
}
}
Layout.XML
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/textView3"
android:text="QUESTION"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="44dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView5"
android:layout_marginTop="46dp"
android:phoneNumber="false"
android:gravity="center"
android:layout_below="@+id/textView3"
android:layout_centerHorizontal="true" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A"
android:id="@+id/button2"
android:layout_alignTop="@+id/textView5"
android:layout_toLeftOf="@+id/textView5"
android:layout_toStartOf="@+id/textView5" />
<TextView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView6"
android:layout_below="@+id/button2"
android:layout_toRightOf="@+id/button2"
android:layout_toEndOf="@+id/button2"
android:gravity="center" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="B"
android:id="@+id/button3"
android:layout_below="@+id/button2"
android:layout_alignLeft="@+id/button2"
android:layout_alignStart="@+id/button2"
android:layout_alignRight="@+id/button2"
android:layout_alignEnd="@+id/button2"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView7"
android:layout_below="@+id/button3"
android:layout_alignLeft="@+id/textView6"
android:layout_alignStart="@+id/textView6"
android:gravity="center" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="C"
android:id="@+id/button4"
android:layout_alignTop="@+id/textView7"
android:layout_alignLeft="@+id/button3"
android:layout_alignStart="@+id/button3" />
<TextView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView8"
android:layout_below="@+id/button4"
android:layout_toRightOf="@+id/button4"
android:layout_toEndOf="@+id/button4"
android:gravity="center" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="D"
android:id="@+id/button5"
android:layout_alignTop="@+id/textView8"
android:layout_alignLeft="@+id/button4"
android:layout_alignStart="@+id/button4" />
等待suggestion.It如果你提前帮助我out.thanks将不胜感激
从列表视图中执行。
l1.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
{
Toast.makeText(getActivity(), "" + position, Toast.LENGTH_SHORT).show();
}
});
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view,
int position, long id) {
final String item = (String) parent.getItemAtPosition(position);
t1.setText(String.valueOf(item));
}
});
关于代码:
SimpleCursorAdapter sca = new SimpleCursorAdapter(MainActivity.this, R.layout.compo_list, c1, from, to);
ListView l1 = (ListView) findViewById(R.id.listView);
当您使用布局 xml compo_list
调用 SimpleCursorAdapter
时,它不会扩充布局。它适用于 适配器 而 而不是 Activity。因此你应该在 findViewById(R.id.listView)
上得到运行时错误
建议:
- 在 SimpleCursorAdapter 中,复制适配器的代码 findViewById。这是一个常用的技术。
- 不要试图在 Activity 中充气,
setContentView
已经这样做了。这很令人困惑,为此需要做很多工作。通常充气是在片段中完成的。在 Fragment 中,您可以调用并创建 SimpleCursorAdapter 的新实例。
- Activity 中已有代码
setContentView(R.layout.activity_main)
。这通常是您唯一可以放置 UI 元素的布局文件。
编辑:
根据您的建议,这里有关于 ListView:
的优秀网页教程
- ArrayAdapter@Using an ArrayAdapter with ListView
- SimpleCursorAdapter 与 ListView Using CursorAdapters
备注:
- 网页 1 介绍了将 ListView 与流行的 ARrayAdapter 结合使用。
- 第 2 页介绍了 CursorAdapters 的使用,假定您知道如何使用 ListView 和基本 Adapters。
Link 第 1 页的代码片段:
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
User user = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_user, parent, false);
}
注意代码片段中的 inflate 方法。这是您要用于 R.layout.compo_list
.
的布局
我希望这对您有所帮助并能解释您的问题。看来你还有一些工作要做。祝你好运,玩得开心...
放置了一个名为 ListViewAdapter 的新 activity,它扩展了 BaseAdapter 并重写了 it.Placed 中的函数,此 class 中的所有 OnClick() 活动都运行良好。
如果有人需要更多信息,请联系我。
这是我的 app.When 点击新按钮,它会一个接一个地显示问题,如果我们点击选项(A、B、C、D),我应该会显示正确的或 incorrect.For 个问题我做了编码,现在建议我选择。
我在 xml 文件中有 5 个文本视图和 4 个按钮,这些数据是从数据库中填充的,所以我使用了 ListView 并且 SimpleCursorAdapter.It 一切正常 fine.Now 我想编写 OnClick 函数对于 Xml file.I 中的按钮,无法添加 SetOnClickListener,因为它显示错误 "Couldnt fine the resource id" 它显示为按钮在不同的 xml 中可用。 如何为这些按钮分配 OnClick()?
SQLiteDatabase db;
Cursor c1;
Button b1;
String from[] = {"_id", "optn1", "optn2", "optn3", "optn4", "ab"};
int[] to = {R.id.textView3, R.id.textView5, R.id.textView6, R.id.textView7, R.id.textView8, R.id.textView10};
int i = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db.execSQL("CREATE TABLE ques(_id TEXT,optn1 TEXT ,optn2 TEXT,optn3 TEXT,optn4 TEXT,qno INTEGER,ab INTEGER)");
t1 = (TextView) findViewById(R.id.textView4);
t2 = (TextView) findViewById(R.id.textView9);
b1 = (Button) findViewById(R.id.button);
b1.setOnClickListener(this);
}
public void onClick(View v) {//this onclick is to display the texts only if the button is clicked not as soon as the app is executed
if (v == b1) {
db = openOrCreateDatabase("quiz1.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);
if (c1 != null) {
i = c1.getInt(c1.getColumnIndex("qno"));
}
c1 = db.rawQuery("SELECT * FROM ques WHERE qno>'" + i + "' ORDER BY qno LIMIT 1", null);
SimpleCursorAdapter sca = new SimpleCursorAdapter(MainActivity.this, R.layout.compo_list, c1, from, to);
ListView l1 = (ListView) findViewById(R.id.listView);
l1.setAdapter(sca);
sca.changeCursor(c1);
t1.setText(String.valueOf(i));
}
}
Layout.XML
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/textView3"
android:text="QUESTION"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="44dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView5"
android:layout_marginTop="46dp"
android:phoneNumber="false"
android:gravity="center"
android:layout_below="@+id/textView3"
android:layout_centerHorizontal="true" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A"
android:id="@+id/button2"
android:layout_alignTop="@+id/textView5"
android:layout_toLeftOf="@+id/textView5"
android:layout_toStartOf="@+id/textView5" />
<TextView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView6"
android:layout_below="@+id/button2"
android:layout_toRightOf="@+id/button2"
android:layout_toEndOf="@+id/button2"
android:gravity="center" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="B"
android:id="@+id/button3"
android:layout_below="@+id/button2"
android:layout_alignLeft="@+id/button2"
android:layout_alignStart="@+id/button2"
android:layout_alignRight="@+id/button2"
android:layout_alignEnd="@+id/button2"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView7"
android:layout_below="@+id/button3"
android:layout_alignLeft="@+id/textView6"
android:layout_alignStart="@+id/textView6"
android:gravity="center" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="C"
android:id="@+id/button4"
android:layout_alignTop="@+id/textView7"
android:layout_alignLeft="@+id/button3"
android:layout_alignStart="@+id/button3" />
<TextView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView8"
android:layout_below="@+id/button4"
android:layout_toRightOf="@+id/button4"
android:layout_toEndOf="@+id/button4"
android:gravity="center" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="D"
android:id="@+id/button5"
android:layout_alignTop="@+id/textView8"
android:layout_alignLeft="@+id/button4"
android:layout_alignStart="@+id/button4" />
等待suggestion.It如果你提前帮助我out.thanks将不胜感激
从列表视图中执行。
l1.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
{
Toast.makeText(getActivity(), "" + position, Toast.LENGTH_SHORT).show();
}
});
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view,
int position, long id) {
final String item = (String) parent.getItemAtPosition(position);
t1.setText(String.valueOf(item));
}
});
关于代码:
SimpleCursorAdapter sca = new SimpleCursorAdapter(MainActivity.this, R.layout.compo_list, c1, from, to);
ListView l1 = (ListView) findViewById(R.id.listView);
当您使用布局 xml compo_list
调用 SimpleCursorAdapter
时,它不会扩充布局。它适用于 适配器 而 而不是 Activity。因此你应该在 findViewById(R.id.listView)
建议:
- 在 SimpleCursorAdapter 中,复制适配器的代码 findViewById。这是一个常用的技术。
- 不要试图在 Activity 中充气,
setContentView
已经这样做了。这很令人困惑,为此需要做很多工作。通常充气是在片段中完成的。在 Fragment 中,您可以调用并创建 SimpleCursorAdapter 的新实例。 - Activity 中已有代码
setContentView(R.layout.activity_main)
。这通常是您唯一可以放置 UI 元素的布局文件。
编辑: 根据您的建议,这里有关于 ListView:
的优秀网页教程- ArrayAdapter@Using an ArrayAdapter with ListView
- SimpleCursorAdapter 与 ListView Using CursorAdapters
备注:
- 网页 1 介绍了将 ListView 与流行的 ARrayAdapter 结合使用。
- 第 2 页介绍了 CursorAdapters 的使用,假定您知道如何使用 ListView 和基本 Adapters。
Link 第 1 页的代码片段:
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
User user = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_user, parent, false);
}
注意代码片段中的 inflate 方法。这是您要用于 R.layout.compo_list
.
我希望这对您有所帮助并能解释您的问题。看来你还有一些工作要做。祝你好运,玩得开心...
放置了一个名为 ListViewAdapter 的新 activity,它扩展了 BaseAdapter 并重写了 it.Placed 中的函数,此 class 中的所有 OnClick() 活动都运行良好。 如果有人需要更多信息,请联系我。