我有一个自定义ListView工作。我想知道的是如何在GetView方法中检查值或获取ListView中行的文本。我基本上得到了ListView中的汽车名称列表,如本田,福特等。当用户点击汽车或汽车的名称时,文本旁边会出现带有该汽车的图像。当click事件发生时,car name / make被添加到String ArrayList selected_fields.add(selectedFromList)。我现在要做的是找到一种方法,我可以在ListView中获取行的值,以便我可以看到它们是否包含在selected_fields数组中找到的任何值。如您所知,ListView中的内容已被回收。这是我的代码
@Override
public View getView(final int positions, View convertView, ViewGroup parent) {
final ViewHolder holder;
// what I would like to do here is get the Value of the ListView Rows here
// I can then check if that value matches up with things inside the
// selected_fields array so that I can do something like
// If convertView.Rows[value].contains(selected_genre) then show image .
if(convertView==null){
inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.from(c).inflate(R.layout.car_names, null);
holder.Car_Names=(TextView) convertView.findViewById(R.id.car_names);
}
binding.ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
String selectedFromList = ((String)binding.ListView.getItemAtPosition(position));
selected_fields.add(selectedFromList);
holder.selected_genres = (ImageView) view.findViewById(R.id.car_names);
holder.car_names.setVisibility(View.VISIBLE);
}
});
names= genres.toArray(new String[0]);
holder.text1.setText(names[pos]);
notifyDataSetChanged();
return convertView;
}
}
例如,Onclick方法中的这段代码获取了单击的ListView行的值。我现在想要获取OnClick方法之外的所有ListView行的值,并检查ListView Rows是否包含selected_fields数组中的值。
((String)binding.ListView.getItemAtPosition(position));
selected_fields.add(selectedFromList);
答案 0 :(得分:0)
获取与ListView
中的行关联的值的最简单方法是在其适配器上调用getItem()
。如果使用ArrayAdapter
,由于泛型的魔力,此方法返回正确的类型,因此不需要进位。
答案 1 :(得分:0)
第1步: 使用一个方法创建活动或片段中的接口,该方法具有用于传递给适配器的vo的单个参数。
第2步:
创建接口对象并将其传递给适配器
第3步:
使用单项容器在适配器中创建一个单击。
第4步:
在点击内部使用位置
获取单个项目vo第5步:
使用interface对象调用接口方法。单项vo的方法名称
第6步:
在activity / fragment接口方法中使用将获取数据
第7步:
在该方法内做你想做的事。
例如
public interface ProcessClick {
void getItem(Model model);
}
public class MainActivity extends AppCompatActivity implements ProcessClick {
private ArrayList<Model> model;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
adapter = new Adapter(this, model);
}
@Override
public void getItem(Model model) {
}
}
在适配器
中private ProcessClick onclick;
holder.container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Model model = models.get(position);
onclick;.getItem(model);
}
});
答案 2 :(得分:0)
,您可以像这样创建接口
Listener mListener;
interface Listener {
void onClick(int position, Model mModel,mListArray);
}
@Override
public View getView(final int positions, View convertView, ViewGroup parent) {
...
holder.yourWidget.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Model mModel = mListArray.get(position);
mListener.onClick(position, mModel, mListArray);
}
});
...
}
在您的活动中,您可以像这样诋毁您的界面
public class yourActivity extends Activity implements yourAdapter.Listener
{
......
@Override
public void onClick(int position, Model mModel, ArrayList<Model> mListArray) {
do whatever you want to do with this perticular position
}
.....
}