2016-08-01 36 views
1

我試圖添加一個Button,點擊時應該打開一個新的Activity。儘管花費了很長時間,但我的努力並未成功。如果我添加OnClickListener並單擊Button它給我一個錯誤。感謝您的幫助。 Listele.JavaAndroid RecylerView添加按鈕給我錯誤

package com.example.hp.myapplication; 
import android.view.View; 
import android.widget.Button; 

public class Listele { 

private String adi; 
private String fiyat; 
private String aciklama; 
private String stok; 
private String resim; 

public Listele(String adi, String fiyat, String aciklama, String stok,String resim) { 
    this.adi = adi; 
    this.fiyat = fiyat; 
    this.aciklama = aciklama; 
    this.stok = stok; 
    this.resim = resim; 

} 

//getters and setters 

@Override 
public String toString() { 
    return "Listele{" + 
      "adi='" + adi + '\'' + 
      ", fiyat='" + fiyat + '\'' + 
      ", aciklama='" + aciklama + '\'' + 
      ", stok='" + stok + '\'' + 
      ", resim='" + resim + '\'' + 
      '}'; 
} 

} 

ListeleAdapter.Java

package com.example.hp.myapplication; 
//imports 

public class ListeleAdapter extends RecyclerView.Adapter<ListeleAdapter.urunlistem> { 

private Context contexto; 
private ArrayList<Listele>tortica; 


public ListeleAdapter(ArrayList<Listele> tortica, Context contexto) { 
    this.contexto = contexto; 
    this.tortica = tortica; 

} 

@Override 
public urunlistem onCreateViewHolder(ViewGroup parent, int viewType) { 

    return new urunlistem(LayoutInflater.from(parent.getContext()).inflate(R.layout.list,null)); 
} 

@Override 
public void onBindViewHolder(urunlistem holder, int position) { 

    holder.adi.setText(tortica.get(position).getAdi()); 
    holder.aciklama.setText(tortica.get(position).getAciklama()); 
    holder.stok.setText(tortica.get(position).getStok()); 
    holder.fiyat.setText(tortica.get(position).getFiyat()); 
    Glide.with(contexto).load("http://192.168.1.33:8080/urunler/"+tortica.get(position).getResim()).into(holder.tresim); 

} 

@Override 
public int getItemCount() { 
    return tortica.size(); 
} 

public static class urunlistem extends RecyclerView.ViewHolder{ 
    ImageView tresim; 
    TextView adi,fiyat,stok,aciklama; 
    Button sepete_ekle; 
    ArrayList<Listele> listeles = new ArrayList<Listele>(); 

    public urunlistem(View itemView) { 
     super(itemView); 
     tresim=(ImageView)itemView.findViewById(R.id.resim); 
     adi=(TextView)itemView.findViewById(R.id.adi_urun); 
     fiyat=(TextView)itemView.findViewById(R.id.fiyat); 
     stok=(TextView)itemView.findViewById(R.id.stok); 
     aciklama=(TextView)itemView.findViewById(R.id.aciklama); 

    } 

} 

} 

MainActivity.Java

package com.example.hp.myapplication; 
//imports 

public class MainActivity extends AppCompatActivity { 


private static final String url="http://192.168.1.33:8080/urunler/goruntule.php"; 
private RecyclerView recyclerView; 
private ListeleAdapter adapter; 
private ArrayList<Listele>listeles = new ArrayList<>(); 
ProgressDialog progressDialog; 

RequestQueue requestQu; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    requestQu = Volley.newRequestQueue(getApplicationContext()); 
    goster(); 
} 

private void goster() { 

    progressDialog = new ProgressDialog(this); 
    progressDialog.setMessage("Bilgiler alınıyor"); 
    recyclerView=(RecyclerView) findViewById(R.id.listado); 
    recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
    //recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this,LinearLayoutManager.HORIZONTAL,false)); 
    recyclerView.setHasFixedSize(true); 
    adapter = new ListeleAdapter(listeles,this); 
    recyclerView.setAdapter(adapter); 

    JsonArrayRequest request = new JsonArrayRequest(url, new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 

      for(int i=0;i<response.length();i++) 
      { 
       try { 
        JSONObject object = response.getJSONObject(i); 
        String resimurl=object.getString("resim"); 
        String adi=object.getString("adi"); 
        String stok=object.getString("stok"); 
        String fiyat=object.getString("fiyat"); 
        String aciklama=object.getString("aciklama"); 
        listeles.add(new Listele(adi,fiyat,aciklama,stok,resimurl)); 

       } catch (JSONException e) { 
        Toast.makeText(MainActivity.this,""+e,Toast.LENGTH_LONG).show(); 

       } 

      } 

      adapter.notifyDataSetChanged(); 

     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

     } 
    }); 

requestQu.add(request); 

} 

} 
+1

你能告訴你哪裏添加'OnClickListener'你'Button',可以添加錯誤消息(logcat的),當您點擊按鈕! –

+0

我把它公開urunlistem(查看項目查看){結束。隨便哪裏我會把這些代碼?主要問題是這樣的。 –

回答

0

我沒有看到你的logcat但首先你加入OnClickListener到喲你在Button錯誤的地方。將它添加到onBindViewHolder而不是ViewHolder的構造函數中。在你的代碼中:

@Override 
public void onBindViewHolder(urunlistem holder, int position) { 

holder.adi.setText(tortica.get(position).getAdi()); 
holder.aciklama.setText(tortica.get(position).getAciklama()); 
holder.stok.setText(tortica.get(position).getStok()); 
holder.fiyat.setText(tortica.get(position).getFiyat()); 
Glide.with(contexto).load("http://192.168.1.33:8080/urunler/"+ 
tortica.get(position).getResim()).into(holder.tresim); 

holder.button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String salutation="Merhaba | Hello | Здравствуйте | Hallo | Salut"; 
      Toast.makeText(mContext,salutation,Toast.LENGTH_SHORT).show(); 
     } 
    }); 

} 
+0

它使得錯誤,如「致命例外:主 進程:com.example.hp.myapplication,PID:2412 java.lang.NullPointerException」 –

+0

你已經初始化你的** sepete_ekle **'Button'在你的ViewHolders構造函數。像這樣:'sepete_ekle =(Button)itemView.findViewById(R.id.sepete_ekle);' –

+0

這是否解決了您的問題? –

0

這是因爲你從來沒有誇大你的ViewHolder類中的按鈕。還記得在java中使用視圖時應該如何「查找視圖」?去做。

0

希望這有助於你

 package com.example.hp.myapplication; 
     //imports 

     public class ListeleAdapter extends RecyclerView.Adapter<ListeleAdapter.urunlistem> { 

     private Context contexto; 
     private ArrayList<Listele>tortica; 


     public ListeleAdapter(ArrayList<Listele> tortica, Context contexto) { 
      this.contexto = contexto; 
      this.tortica = tortica; 

     } 

     @Override 
     public urunlistem onCreateViewHolder(ViewGroup parent, int viewType) { 

      return new urunlistem(LayoutInflater.from(parent.getContext()).inflate(R.layout.list,null)); 
     } 

     @Override 
     public void onBindViewHolder(urunlistem holder, int position) { 

      holder.adi.setText(tortica.get(position).getAdi()); 
      holder.aciklama.setText(tortica.get(position).getAciklama()); 
      holder.stok.setText(tortica.get(position).getStok()); 
      holder.fiyat.setText(tortica.get(position).getFiyat()); 
      Glide.with(contexto).load("http://192.168.1.33:8080/urunler/"+tortica.get(position).getResim()).into(holder.tresim); 

     } 

     @Override 
     public int getItemCount() { 
      return tortica.size(); 
     } 

     //Step 1: Implement View.OnClickListener as below 
     public static class urunlistem extends RecyclerView.ViewHolder implements View.OnClickListener{ 
      ImageView tresim; 
      TextView adi,fiyat,stok,aciklama; 
      Button sepete_ekle; 
      ArrayList<Listele> listeles = new ArrayList<Listele>(); 

      public urunlistem(View itemView) { 
       super(itemView); 
       tresim=(ImageView)itemView.findViewById(R.id.resim); 
       adi=(TextView)itemView.findViewById(R.id.adi_urun); 
       fiyat=(TextView)itemView.findViewById(R.id.fiyat); 
       stok=(TextView)itemView.findViewById(R.id.stok); 
       aciklama=(TextView)itemView.findViewById(R.id.aciklama); 

       //Step 2: Register Your Button here below 
       sepete_ekle=(Button)itemView.findViewById(R.id.button);      
       sepete_ekle.setOnClickListener(this); 

      } 

      @Override 
      public void onClick(View v) { 
        // Step 3: Redirect to next Activity From here 
        Intent intent = new Intent(contexto, NextActivity.class); 
        contexto.startActivity(intent); 
      } 

     } 

     }