我有这个问题好像2天了,而且我是STUCK。我正在制作一个由类和学生输入组成的类记录器应用程序。我已经将列的布局用于listview:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="75dp"
android:orientation="horizontal"
android:gravity="center|center_horizontal"
android:clickable="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text=" 3"
android:id="@+id/cl_id"
android:layout_weight="1"
android:layout_marginLeft="10dp"
android:clickable="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="English"
android:id="@+id/cl_name"
android:layout_weight="1"
android:clickable="true" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/img_edit"
android:background="@drawable/ic_edit"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/textView9"
android:layout_toEndOf="@+id/textView9"
android:layout_marginLeft="44dp"
android:layout_marginStart="44dp"
android:onClick="clickedit"
android:clickable="false" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/img_erase"
android:background="@drawable/ic_oie_transparent"
android:layout_alignTop="@+id/imageView2"
android:layout_toRightOf="@+id/imageView2"
android:layout_toEndOf="@+id/imageView2"
android:onClick="clickremove"
android:clickable="false"
android:adjustViewBounds="false" />
ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView3"
android:background="@drawable/ic_oie_transparent"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="40dp"
android:layout_marginEnd="40dp" />
</LinearLayout>
以下是图片:LISTVIEW ROW LAYOUT
我的应用程序已经可以从数据库中填充列表视图
以下是一个示例:DATA POPULATED LISTVIEW
现在的问题是,当我使用OnItemClickListener方法时,我无法从列表中单击或获取任何值。我已经尝试过来自互联网的TONS教程,例如youtube和这个网站。但我仍然没有找到任何解决方案,因为我在寻找解决方案时,我会不时地疯狂
我的听众的目的是访问不同的教室(点击列表中的项目),然后我可以添加学生等。
以下是我班级的代码;
1。)classroom.class&lt;&lt;列表视图的位置
package com.example.techport.professorsboard;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import org.w3c.dom.Text;
import java.util.List;
public class classroom extends AppCompatActivity {
ListView mylistview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_classroom);
account a = new account();
Typeface typeface = Typeface.createFromAsset(getAssets(),"SqueakyChalkSound.ttf");
TextView id = (TextView)findViewById(R.id.txt_id);
final TextView classname = (TextView)findViewById(R.id.txt_classname);
id.setTypeface(typeface,Typeface.BOLD);
classname.setTypeface(typeface,Typeface.BOLD);
String subtitle="ID: "+a.getID()+" Email: "+a.getEmail();
final Toolbar classroom_toolbar = (Toolbar) findViewById(R.id.classroom_toolbar);
setSupportActionBar(classroom_toolbar);
getSupportActionBar().setTitle(a.getUsername());
getSupportActionBar().setSubtitle(subtitle);
getSupportActionBar().setIcon(R.mipmap.ic_launcher);
backgroundtask backgroundtask = new backgroundtask(this);
backgroundtask.execute("get_info");
//BELOW HERE ARE THE CODES I USED FOR SEETING THE ONCLICKLISTENER
ListView mylist = (ListView)findViewById(R.id.display_listvew);
mylist.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String class_id = ((TextView)view.findViewById(R.id.cl_id)).getText().toString();
String class_name = ((TextView)view.findViewById(R.id.cl_name)).getText().toString();
Toast.makeText(getBaseContext(),class_id+class_name,Toast.LENGTH_SHORT).show();
}
});
}
//ABOVE HERE ARE THE CODES I USED FOR SEETING THE ONCLICKLISTENER
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.main_menu,menu);
return super.onCreateOptionsMenu(menu);
}
public boolean onOptionsItemSelected (MenuItem item){
switch(item.getItemId()){
case R.id.menu_1:
Intent ClassroomTOAddclass = new Intent(classroom.this,addclass.class);
startActivity(ClassroomTOAddclass);
break;
case R.id.menu_2:
Intent ClassroomTOMain = new Intent(classroom.this,MainActivity.class);
startActivity(ClassroomTOMain);
Toast logout = Toast.makeText(classroom.this,"Logout session successful!",Toast.LENGTH_SHORT);
finish();
logout.show();
break;
}
return super.onOptionsItemSelected(item);
}
}
2。)backgroundtask&lt;&lt;负责AsyncTask
package com.example.techport.professorsboard;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
import android.provider.ContactsContract;
import android.widget.ListView;
import android.widget.Toast;
import java.util.List;
/**
* Created by Techport on 09/08/2016.
*/
public class backgroundtask extends AsyncTask<String,classes,String> {
Context ctx;
classesadapter classesadapter;
Activity activity;
ListView listView;
backgroundtask(Context ctx){
this.ctx = ctx;
activity = (Activity)ctx;
}
@Override
protected void onPreExecute() {
}
@Override
protected String doInBackground(String... params) {
String method = params[0];
DatabaseHelper db = new DatabaseHelper(ctx);
if(method.equals("add_info")){
String classname = params[1];
int profid = Integer.parseInt(params[2]);
SQLiteDatabase helper = db.getWritableDatabase();
db.addclass(classname,profid);
return "One row inserted. . .";
}
else if(method.equals("get_info")){
listView = (ListView) activity.findViewById(R.id.display_listvew);
SQLiteDatabase helper = db.getReadableDatabase();
Cursor cursor = db.getclasses(helper);
classesadapter = new classesadapter(ctx,R.layout.display_classrooms);
String class_name;
int prof_id,class_id;
while(cursor.moveToNext()){
class_id = cursor.getInt(cursor.getColumnIndex("class_id"));
prof_id = cursor.getInt(cursor.getColumnIndex("prof_id"));
class_name = cursor.getString(cursor.getColumnIndex("class_name"));
classes classses = new classes(class_name,class_id,prof_id);
publishProgress(classses);
}
return "get_info";
}
return null;
}
@Override
protected void onProgressUpdate(classes... values) {
classesadapter.add(values[0]);
}
@Override
protected void onPostExecute(String result) {
if(result.equals("get_info"))
{
listView.setAdapter(classesadapter);
}
else {
Toast.makeText(ctx, result, Toast.LENGTH_LONG).show();
}
}
}
3。)classesadapter&lt;&lt;类的适配器类
package com.example.techport.professorsboard;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Techport on 10/08/2016.
*/
public class classesadapter extends ArrayAdapter {
List list = new ArrayList();
public classesadapter(Context context, int resource) {
super(context, resource);
}
public void add(classes object) {
list.add(object);
super.add(object);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Typeface typeface = Typeface.createFromAsset(getContext().getAssets(),"SqueakyChalkSound.ttf");
View row = convertView;
classesholder classesholder;
if(row==null){
LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = layoutInflater.inflate(R.layout.display_classrooms,parent,false);
classesholder = new classesholder();
classesholder.c_id = (TextView) row.findViewById(R.id.cl_id);
classesholder.c_name = (TextView) row.findViewById(R.id.cl_name);
row.setTag(classesholder);
}
else{
classesholder = (classesholder) row.getTag();
}
classes classes = (classes) getItem(position);
classesholder.c_id.setText(Integer.toString(classes.getClass_id()));
classesholder.c_name.setText(classes.getClass_name());
classesholder.c_id.setTypeface(typeface);
classesholder.c_id.setTextColor(Color.WHITE);
classesholder.c_name.setTypeface(typeface);
classesholder.c_name.setTextColor(Color.WHITE);
return row;
}
static class classesholder
{
TextView c_id, c_name;
}
}
原谅我,如果我过多地给出了代码,那就是我现在这么偏执,以至于我不知道如何处理这个问题。我希望这些就足够了。我需要帮助......
答案 0 :(得分:0)
我发现了问题。
我只需删除布局中视图的所有onClick值。