我有onItemClickListener事件的问题,它没有做任何事情,我花了3个晚上试图解决问题而我什么都没有,我希望有人可以帮助我。
我需要控制列表视图中每一行的位置,例如更改TextView的值或更改所需位置上RadioButton的已检查状态,例如NameOfRadioButon(atPosition).setChecked(true)
或TxtArticulo(atPosition).setText("it works")
。
代码如下:
Activity.java:
package com.example.ernesto.mitienditapuntodeventa;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class CatArticulosActivity extends ActionBarActivity {
//Declaracion de Objetos
//Declare
Button BtnAgregar,BtnEditar,BtnEliminar;
ImageView IvWipe;
ListViewAdapter_CatArticulos adapterCatArticulos;
EditText TxtFiltro;
String[] nomArticulo;
String[] unidad;
String[] precio;
Integer[] idArticulo;
public static EditText HayCambio;
public String cadenaSQL,conteoSQL;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cat_articulos);
//Creacion de tabla
//Creatin Table
SQLiteDatabase db=getApplicationContext().openOrCreateDatabase("DB", Context.MODE_PRIVATE,null);
db.execSQL("Create Table if not exists Articulos(ID int,Articulo Varchar,Unidad Varchar," +
"Precio Double,Existencia Double,ExisMax Double,ExisMin Double);");
//Enlace con el Layout
//Link with the Layout
BtnAgregar=(Button)findViewById(R.id.btnAgregar);
BtnEditar=(Button)findViewById(R.id.btnEditar);
BtnEliminar=(Button)findViewById(R.id.btnEliminar);
IvWipe=(ImageView)findViewById(R.id.ivWipe);
TxtFiltro=(EditText)findViewById(R.id.txtFiltrar);
HayCambio=(EditText)findViewById(R.id.txtHayCambio);
HayCambio.setEnabled(false);
HayCambio.setVisibility(View.INVISIBLE);
//Boton agregar
//Add Button
BtnAgregar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
edit_articulo_Dialogo dialogFragment = new edit_articulo_Dialogo();
dialogFragment.show(getFragmentManager(), "");
}
});
//Boton agregar
//Edit Button
BtnEditar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//TODO Abrir Dialogo para abrir el seleccionado
//TODO Refrescar Lista
}
});
//Boton eliminar
//Delete Button
BtnEliminar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//TODO Eliminar el seleccionado
//TODO Refrescar lista
}
});
//Lo que se escribe en el EditText muestra coincidencias en el ListView
//Text in the EditText refresh the ListView content with the filter
TxtFiltro.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
@Override
public void afterTextChanged(Editable editable) {
inicializaAdaptador();
}
});
//Detecta cuando hay un cambio en el EditText y refresca el contenido del ListView
//Detecs changes in table and refresh ListView content
HayCambio.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
@Override
public void afterTextChanged(Editable editable) {
inicializaAdaptador();
}
});
//Reinicia el filtro
//Reset the filter
IvWipe.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
TxtFiltro.setText("");
inicializaAdaptador();
}
});
//Primer llenado del ListView en el onCreate
//First load to ListView on onCreate
inicializaAdaptador();
}
//Esta clase asigna los valores al adapter
//This class send the values to the adapter
public void inicializaAdaptador(){
if (TxtFiltro.getText().toString().equals("")){
conteoSQL="Select Count(*) From Articulos;";
cadenaSQL="Select Articulo,Unidad,Precio,ID from Articulos Order By Articulo;";
}else {
conteoSQL="Select Count(*) From Articulos Where Articulo like '%"+
TxtFiltro.getText().toString()+"%';";
cadenaSQL="Select Articulo,Unidad,Precio,ID from Articulos Where Articulo like '%"+
TxtFiltro.getText().toString()+"%' Order By Articulo;";
}
SQLiteDatabase db=getApplicationContext().openOrCreateDatabase("DB", Context.MODE_PRIVATE,null);
int NumeroRegistros=0,Pila=0;
Cursor cVerificaNumeroRegistro=db.rawQuery(conteoSQL,null);
if (cVerificaNumeroRegistro.moveToFirst()){
NumeroRegistros=cVerificaNumeroRegistro.getInt(0);
}else {NumeroRegistros=0;}
cVerificaNumeroRegistro.close();
if (NumeroRegistros>=1){
nomArticulo=new String[NumeroRegistros];
unidad=new String[NumeroRegistros];
precio=new String[NumeroRegistros];
idArticulo=new Integer[NumeroRegistros];
Cursor cAgregaValPilas = db.rawQuery(cadenaSQL,null);
if (cAgregaValPilas.moveToFirst()){
do {
nomArticulo[Pila]=cAgregaValPilas.getString(0);
unidad[Pila]=cAgregaValPilas.getString(1);
precio[Pila]=String.valueOf(cAgregaValPilas.getDouble(2));
idArticulo[Pila]=cAgregaValPilas.getInt(3);
Pila+=1;
}while (cAgregaValPilas.moveToNext());
}
cAgregaValPilas.close();
final ListView listaArticulos=(ListView)findViewById(R.id.lvArticulos);
adapterCatArticulos=new ListViewAdapter_CatArticulos(this,nomArticulo,unidad,precio,idArticulo);
listaArticulos.setAdapter(adapterCatArticulos);
listaArticulos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
final TextView txt =(TextView) view.findViewById(R.id.txtArticulo);
Tostadora(txt.getText().toString());
}
});
}else {
if (TxtFiltro.getText().toString().equals("")){
Tostadora("No hay registros para presentar");
}else {
Tostadora("La busqueda no permite filtar mas registros");
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_cat_articulos, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void Tostadora(String mensaje){
Toast.makeText(getApplicationContext(),mensaje,Toast.LENGTH_SHORT).show();
}
}
Layout.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.example.ernesto.mitienditapuntodeventa.CatArticulosActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Catálogo de Artículos"
android:id="@+id/textView12"
android:layout_gravity="center_horizontal" />
<EditText
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/txtHayCambio"
android:text="1" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/txtFiltrar"
android:hint="Filtrar"
android:layout_weight="1"
android:layout_marginTop="7dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ivWipe"
android:src="@drawable/wipe" />
</LinearLayout>
<ListView
android:layout_width="match_parent"
android:layout_height="0dp"
android:id="@+id/lvArticulos"
android:layout_weight=".99"
android:choiceMode="singleChoice"
android:layout_marginTop="7dp"
android:descendantFocusability="blocksDescendants"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Agregar"
android:id="@+id/btnAgregar"
android:layout_weight=".333" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Editar"
android:id="@+id/btnEditar"
android:layout_weight=".333" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Eliminar"
android:id="@+id/btnEliminar"
android:layout_weight=".333" />
</LinearLayout>
</LinearLayout>
ListViewAdapter_CatArticulos.java:
package com.example.ernesto.mitienditapuntodeventa;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.RadioButton;
import android.widget.TextView;
/**
* Created by Ernesto on 10/07/2015.
*/
public class ListViewAdapter_CatArticulos extends BaseAdapter {
Context context;
String[] NomArticulo;
String[] Unidad;
String[] Precio;
Integer[] IdArticulo;
LayoutInflater inflater;
public ListViewAdapter_CatArticulos(Context context,String[] NomArticulo,String[] Unidad,
String[] Precio, Integer[] IdArticulo){
this.context=context;
this.NomArticulo=NomArticulo;
this.Unidad=Unidad;
this.Precio=Precio;
this.IdArticulo=IdArticulo;
}
@Override
public int getCount() {
return NomArticulo.length;
}
@Override
public Object getItem(int i) {
return IdArticulo;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
final TextView TvNomArticulo,TvUnidad,TvPrecio,TvIdArticulo;
final RadioButton rBtnSeleccionado;
inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView=inflater.inflate(R.layout.lista_catalogoarticulos,viewGroup,false);
TvNomArticulo=(TextView)itemView.findViewById(R.id.tvNomArticulo);
TvUnidad=(TextView)itemView.findViewById(R.id.tvUnidad);
TvPrecio=(TextView)itemView.findViewById(R.id.tvPrecio);
TvIdArticulo=(TextView)itemView.findViewById(R.id.tvID);
rBtnSeleccionado=(RadioButton)itemView.findViewById(R.id.rbtnArtSeleccionado);
TvNomArticulo.setText(NomArticulo[i]);
TvUnidad.setText(TvUnidad.getText().toString() + Unidad[i]);
TvPrecio.setText(TvPrecio.getText().toString() + Precio[i]);
TvIdArticulo.setText(IdArticulo[i].toString());
rBtnSeleccionado.setText(null);
return itemView;
}
}
lista_catalogoarticulos.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/rbtnArtSeleccionado"
android:checked="false"
android:layout_gravity="center"
android:layout_margin="5dp" />
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Nombre de Articulo"
android:id="@+id/tvNomArticulo" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dp"
android:layout_height="0dp"
android:text="ID"
android:id="@+id/tvID"
android:layout_weight="0" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Unidad: "
android:id="@+id/tvUnidad"
android:layout_weight=".333" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Precio: "
android:id="@+id/tvPrecio"
android:layout_weight=".33" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
答案 0 :(得分:0)
我不认为您的编辑文本更改时更新列表。您需要通知适配器数据已更改。 adapterCatArticulos.notifyDataSetChanged();
final ListView listaArticulos=(ListView)findViewById(R.id.lvArticulos);
adapterCatArticulos=new ListViewAdapter_CatArticulos(this,nomArticulo,unidad,precio,idArticulo);
listaArticulos.setAdapter(adapterCatArticulos);
listaArticulos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
final TextView txt =(TextView) view.findViewById(R.id.txtArticulo);
Tostadora(txt.getText().toString());
}
});
adapterCatArticulos.notifyDataSetChanged();
}else {
if (TxtFiltro.getText().toString().equals("")){
Tostadora("No hay registros para presentar");
}else {
Tostadora("La busqueda no permite filtar mas registros");
}
}
答案 1 :(得分:0)
final TextView txt =(TextView) view.findViewById(R.id.txtArticulo);
Tostadora(txt.getText().toString());
id txtArticulo 的 TextView 在哪里
答案 2 :(得分:0)
<强>解决强>
只是尝试了很多观点,我终于找到了问题的解决方案。
这对我有用
ListViewAdapter_CatArticulos.java
package com.example.ernesto.mitienditapuntodeventa;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
/**
* Created by Ernesto on 10/07/2015.
*/
public class ListViewAdapter_CatArticulos extends BaseAdapter {
Context context;
String[] NomArticulo;
String[] Unidad;
String[] Precio;
Integer[] IdArticulo;
LayoutInflater inflater;
static int rBtnAnterior=-1;
//Declaro el RadioButton para que sea siempre accesible
//Declare the RadioBurron to always accesible
public static RadioButton rBtnSeleccionado[]=new RadioButton[100000];
public ListViewAdapter_CatArticulos(Context context,String[] NomArticulo,String[] Unidad,
String[] Precio, Integer[] IdArticulo){
this.context=context;
this.NomArticulo=NomArticulo;
this.Unidad=Unidad;
this.Precio=Precio;
this.IdArticulo=IdArticulo;
}
@Override
public int getCount() {
return NomArticulo.length;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(final int i, View view, final ViewGroup viewGroup) {
final TextView TvNomArticulo,TvUnidad,TvPrecio,TvIdArticulo;
final LinearLayout LayOut;
inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View itemView=inflater.inflate(R.layout.lista_catalogoarticulos,viewGroup,false);
TvNomArticulo=(TextView)itemView.findViewById(R.id.tvNomArticulo);
TvUnidad=(TextView)itemView.findViewById(R.id.tvUnidad);
TvPrecio=(TextView)itemView.findViewById(R.id.tvPrecio);
TvIdArticulo=(TextView)itemView.findViewById(R.id.tvID);
//Asigna un idenficador unico basado en un arreglo para poder llamarlo despues
//Asign a unique id of a Arrar to call later
rBtnSeleccionado[IdArticulo[i]]=(RadioButton)itemView.findViewById(R.id.rbtnArtSeleccionado);
LayOut=(LinearLayout)itemView.findViewById(R.id.lRow);
TvNomArticulo.setText(NomArticulo[i]);
TvUnidad.setText(TvUnidad.getText().toString() + Unidad[i]);
TvPrecio.setText(TvPrecio.getText().toString() + Precio[i]);
TvIdArticulo.setText(IdArticulo[i].toString());
//Simplemente ya se conoce que valor se tiene en la pila
//Simple, we know the value of the array
rBtnSeleccionado[IdArticulo[i]].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (rBtnAnterior == -1) {
rBtnAnterior = IdArticulo[i];
rBtnSeleccionado[IdArticulo[i]].setChecked(true);
} else {
rBtnSeleccionado[rBtnAnterior].setChecked(false);
rBtnSeleccionado[IdArticulo[i]].setChecked(true);
rBtnAnterior=IdArticulo[i];
}
}
});
LayOut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (rBtnAnterior == -1) {
rBtnAnterior = IdArticulo[i];
rBtnSeleccionado[IdArticulo[i]].setChecked(true);
} else {
rBtnSeleccionado[rBtnAnterior].setChecked(false);
rBtnSeleccionado[IdArticulo[i]].setChecked(true);
rBtnAnterior=IdArticulo[i];
}
}
});
LayOut.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
return false;
}
});
return itemView;
}
}
感谢每个人帮助我找到解决方案!!!!