【问题标题】:I can't get the values of my textfields from the rows of my ListView我无法从 ListView 的行中获取文本字段的值
【发布时间】:2016-08-10 12:41:09
【问题描述】:

我遇到这个问题已经有 2 天了,我被困住了。我正在制作一个由班级和学生输入组成的班级记录器应用程序。我已经制作了用于列表视图的行布局:

<?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 方法时,我无法单击或从列表中获取任何值。我已经尝试过大量来自互联网的教程,比如 youtube 和这个网站。但是我仍然没有找到任何解决方案,我在寻找解决方案时会时不时发疯

Listener 的目的是访问不同的教室(单击列表中的项目),然后我可以从那里添加学生等。

这是我的课程代码;

1.)classic.class

    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

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

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;
}
}

如果我在提供代码方面做得太多,请原谅我,只是我现在太偏执了,我不知道如何解决这个问题。我希望这些就足够了。请问我需要帮助....

【问题讨论】:

    标签: listview view adapter onitemclicklistener


    【解决方案1】:

    我发现了问题。

    我只需要删除布局内视图的所有 onClick 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多