2016-12-17 30 views
0

我是新手编程人员,并且正在做一个android测试项目,虽然我已经有了一些练习。但是现在我有一些障碍(可能稍后会出现一些障碍),我似乎无法解除阻止。这里是我的第一个2个问题,任何人都可以回答:安卓系统 - 关于列表视图的问题

在同一个活动和使用相同的listview,是否有可能在一个视图中点击,并获得一个信息数组,填充它的后裔选择的视图?我在助手活动中使用SQLite。我可以使用“意图”将活动中的数据传递给其他活动,但我无法参与同一活动。

在制作数组适配器和使用ViewHolder时,是否可以将数组映像归入不同的resource.id?我试图将R.id与一个holder.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); 
       } 
      }); 
     } 
    }); 
} 

}

+0

你说“路障”,但你没有发布你试过的代码,以及你认为出错的地方。建议检查[我如何问一个好问题](http://stackoverflow.com/help/how-to-ask)。 – Tigger

+0

您不应将该适配器或该项目的单击侦听器设置在该按钮内点击侦听器。此外,切换适配器,当你点击一个项目似乎是一个奇怪的设计 –

+0

@ cricket_007我必须在适配器内设置按钮,因为我想按钮来启动列表视图。此外,我不想更改活动,因为我想看到图像被插入到listview以外的活动中。 – Adato

回答

0

当你使用ArrayAdapter为

RecyclerView或ListView

你有哪些要传递到适配器构造数组或数组列表改变。

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

这将通过点击列表视图的项目来更新您的适配器与新列表。