Android - 关于listview的问题

时间:2016-12-17 23:54:24

标签: android sqlite listview

我是编程的新手,我正在android中做一个测试项目,虽然我已经有了一些练习。但是现在我有一些障碍(可能稍后会出现一些),我似乎无法解锁。以下是我可以回答的前两个问题:

在相同的活动中并使用相同的列表视图,是否可以在一个视图中单击,并获取列表视图,其中包含从所选视图下载的一系列信息?我在辅助活动中使用SQLite。我可以使用“Intent”将数据从活动传递到另一个活动,但我无法进行同一活动。

在制作arrayAdapter并使用ViewHolder时,是否可以将数组图像归属于不同的resource.id?我试图将R.id与conc.X.setText()连接起来(这样图像将根据该持有者中的数据进行分发)但我无法做到。

这是适配器类

public class PecasAdaptador extends ArrayAdapter<Peca> {

private final Context context;
private final Peca[] values;

static class ViewHolder {

    public TextView versao;
    public TextView preco;
    public TextView potencia;
    public ImageView foto;
}

public PecasAdaptador(Context context, Peca[] values) {
    super(context, -1, values);
    this.context = context;
    this.values = values;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View rowView;
    LayoutInflater inflater = LayoutInflater.from(context);
    rowView = inflater.inflate(R.layout.peca, null);
    ViewHolder viewHolder = new ViewHolder();
    viewHolder.versao = (TextView) rowView.findViewById(R.id.versao);
    viewHolder.potencia = (TextView) rowView.findViewById(R.id.potencia);
    viewHolder.preco = (TextView) rowView.findViewById(R.id.novorobot5);
    rowView.setTag(viewHolder);
    ViewHolder holder = (ViewHolder) rowView.getTag();
    holder.versao.setText(values[position].getVersao());
    holder.potencia.setText(Aplicacao.recursos.getQuantityString(R.plurals.potencia, values[position].getPotencia()));
    holder.preco.setText(Aplicacao.recursos.getQuantityString(R.plurals.preco, values[position].getPreco()));
    holder.foto.setImageResource(values[position].getFoto());
    return rowView;
}

}

这是活动类

public class NovoRobotActivity extends AppCompatActivity {

PecasHelper helper = new PecasHelper(this);
String nometipo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_novo_robot);
    Button NovaPeca = (Button) findViewById(R.id.novorobot3);
    final ArrayAdapter tipos = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, helper.listaTipos());
    final PecasAdaptador versoes = new PecasAdaptador(this, helper.listaVersoes(nometipo));
    final ListView listapecas = (ListView) findViewById(R.id.lista);
    NovaPeca.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            listapecas.setAdapter(tipos);
            listapecas.setOnItemClickListener(new AdapterView.OnItemClickListener() {
               @Override
               public void onItemClick(AdapterView<?> tipos, View view, int i, long l) {
                   TextView t = (TextView) view;
                   nometipo = t.getText().toString();
                   listapecas.setAdapter(versoes);
               }
            });
        }
    });
}

}

1 个答案:

答案 0 :(得分:1)

每当您使用ArrayAdapter

  

RecyclerView或ListView

您必须更改要传递给适配器构造函数的数组或数组列表。

因此,当您单击列表项时,更新要传递给适配器的数组列表,然后更新活动中的adaptername.notifydatasetchanged()方法。

只需单击列表视图项即可使用新列表更新适配器。