2016-12-17 31 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()方法。

這將通過點擊列表視圖的項目來更新您的適配器與新列表。