Android ListView如何获取每一行

时间:2016-09-26 03:33:01

标签: java android listview android-arrayadapter

我有一个自定义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);

3 个答案:

答案 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
}
.....
}