2016-03-31 13 views
0

Başka bir sınıf, bir ayrıştırma sunucusundaki görüntülerle doldurulmuş olan GridView sınıfını çağırır; bir kullanıcı bir ızgara öğesini tıklarsa, farklı paketlenmiş dizelerle aynı GridView sınıfını başlatır, böylece farklı bir ayrıştırmadan çekilebilir veritabanı sınıfı. Şimdi bu noktada, bir kullanıcı bir GridView öğesini tıklattığında (ayarlanmış olan 2. grid görünümünden), farklı bir aktivite sınıfı başlatmasını istiyorum.Tıklamayla kendisini aramak için bir gridview sınıfı nasıl alırım, sonra başka bir grid öğesine tıklarsanız başka bir etkinliğe başvurur mu?

Eğer onItemClick'te "PARSE_CLASS" paketlenmiş dizesini alırsa bir if/else ifadesi yapmayı denedim ama işe yaramıyor gibi görünmüyor. Android programlama için nispeten yeni, bu yüzden bunu yapmanın en iyi yolunu bilmiyorum.

public class DisplayGrid extends AppCompatActivity implements AdapterView.OnItemSelectedListener { 

    GridView gridView = null; 
    List<ParseObject> obj; 
    ProgressDialog loadProgress; 
    GridViewAdapter adapter; 
    Bundle extras = new Bundle(); 
    GridViewAdapter itemGridAdapter; 
    private List<ImageList> imageArrayList = null; 
    private List<String> categoryNameArrayList = null; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.ws_display_grid); 
     imageArrayList = new ArrayList<ImageList>(); 
     categoryNameArrayList = new ArrayList<String>(); 
     gridView = (GridView) findViewById(R.id.gridView); 
     itemGridAdapter = new GridViewAdapter(DisplayGrid.this, imageArrayList); 
     gridView.setAdapter(itemGridAdapter); 



     new RemoteDataTask().execute(); 

     gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      Intent i = getIntent(); 
      Bundle itemExtras = i.getExtras(); 
      final String activeSupplier = itemExtras.getString("SUPPLIER"); 
      String parseClass = extras.getString("PARSE_CLASS"); 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View v, int position, 
            long arg3) { 
        Intent t = new Intent(getApplicationContext(), DisplayGrid.class); 
        extras.putString("SUPPLIER", activeSupplier); 
        extras.putString("PARSE_CLASS", "Items"); 
        t.putExtras(extras); 
        startActivity(t); 

      } 
     }); 
    }//end onCreate method 


    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 

    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
    } 


    //RemoteDataTask 
    private class RemoteDataTask extends AsyncTask<Void, Void, Void> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      loadProgress = new ProgressDialog(DisplayGrid.this); 
      loadProgress.setTitle("Images"); 
      loadProgress.setMessage("Loading..."); 
      loadProgress.setIndeterminate(false); 
      loadProgress.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 


      try { 
       Intent i = getIntent(); 
       Bundle extras = i.getExtras(); 

       String parseClass = extras.getString("PARSE_CLASS"); 
       String activeSupplier = extras.getString("SUPPLIER"); 

       String category; 

       ParseQuery<ParseObject> query = new ParseQuery<>(parseClass); 
       query.whereEqualTo("username", activeSupplier); 
       obj = query.find(); 
       if (parseClass == "Items") { 
        category = extras.getString("CATEGORY"); 
        query.whereEqualTo("category", category); 

       } 
       for (ParseObject categories : obj) { 
        //get image 
        ParseFile image = (ParseFile) categories.get("image"); 
        ImageList gridBlock = new ImageList(); 
        gridBlock.setImage(image.getUrl()); 
        imageArrayList.add(gridBlock); 
        Log.i("AppInfo", "image sent to imageArrayList"); 

        String categoryName = null; 
        //get category name 
        if (categoryName == null) { 

        } else { 
         categoryName = categories.getString("categoryName"); 
         categoryNameArrayList.add(categoryName); 
         Log.i("AppInfo", categoryName); 
        } 
       } 
      } catch (ParseException e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      gridView = (GridView) findViewById(R.id.gridView); 
      adapter = new GridViewAdapter(DisplayGrid.this, imageArrayList); 
      gridView.setAdapter(adapter); 
      loadProgress.dismiss(); 
      Log.i("AppInfo", "CategoryGrid Populated"); 
     } 


    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == 1 && resultCode == RESULT_OK && data != null) { 
      Uri selectedImage = data.getData(); 
      try { 
       Bitmap bitmapImage = 
         MediaStore.Images.Media.getBitmap 
           (this.getContentResolver(), selectedImage); 

       ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
       bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, stream); 
       byte[] byteArray = stream.toByteArray(); 

       //convert to parse file 
       ParseFile file = new ParseFile("Img.png", byteArray); 

       ParseObject object = new ParseObject("Categories"); 
       object.put("username", ParseUser.getCurrentUser().getUsername()); 
       object.put("image", file); 

       object.saveInBackground(new SaveCallback() { 
        @Override 
        public void done(ParseException e) { 
         if (e == null) { 
          Toast.makeText(getApplication().getBaseContext(), "Your image has been saved", Toast.LENGTH_SHORT).show(); 
         } else { 
          Toast.makeText(getApplication().getBaseContext(), "Upload failed, please try again", Toast.LENGTH_SHORT).show(); 
         } 
        } 
       }); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       Toast.makeText(getApplication().getBaseContext(), "Upload failed, please try again", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 

    //begin getTitle method 

    //begin createMenu 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     new MenuInflater(getApplication()) 
       .inflate(R.menu.options, menu); 

     return (super.onCreateOptionsMenu(menu)); 
    } 
    //end createMenu 

    //begin onOptionsItemSelected 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 


     if (item.getItemId() == R.id.manufacturers) { 
      Intent i = new Intent(getApplicationContext(), SupplierList.class); 
      startActivity(i); 
      return true; 
     } else if (item.getItemId() == R.id.add) { 
      Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(i, 1); 
      return true; 
     } else if (item.getItemId() == R.id.sign_out) { 
      ParseUser.logOut(); 

      Intent i = new Intent(getApplicationContext(), MainActivity.class); 
      startActivity(i); 
      return true; 
     } 

     return (super.onOptionsItemSelected(item)); 
    } 
    //end onOptionsItemSelected 
} 

Denediğim şey budur. Bunu denediğimde ikinci GridView yüklenemedi. Bu yüzden, sanırım "PARSE_CLASS" paketlenmiş dizeyi ikinci kez geri alamıyorum. reddit en öğrenmek programlama

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     Intent i = getIntent(); 
     Bundle itemExtras = i.getExtras(); 
     final String activeSupplier = itemExtras.getString("SUPPLIER"); 
     String parseClass = extras.getString("PARSE_CLASS"); 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View v, int position, 
           long arg3) { 
      if (parseClass == "Categories") { 
       Intent t = new Intent(getApplicationContext(), DisplayGrid.class); 
       extras.putString("SUPPLIER", activeSupplier); 
       extras.putString("PARSE_CLASS", "Items"); 
       t.putExtras(extras); 
       startActivity(t); 
      } else if(parseClass == "Items"){ 
       Intent t = new Intent(getApplicationContext(), ItemDisplay.class); 
       //extras.putString("SUPPLIER", activeSupplier); 
       //extras.putString("PARSE_CLASS", "Items"); 
       //t.putExtras(extras); 
       startActivity(t); 
      } 

     } 
    }); 

CEVAP Birisi dize karşılaştırmaları ile bir sorunu olduğunu işaret etmek nezaketini gösterdi.

if(parseClass.equals("Categories")){} 

yerine kendimi aptal, bu uzun feci çabalardan umarım başkasının faydaları gibi hissediyorum

if(parseClass == "Categories"){} 

arasında kullanmak zorunda kaldı.

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     Intent t = getIntent(); 
     Bundle itemExtras = t.getExtras(); 
     String activeSupplier = itemExtras.getString("SUPPLIER"); 
     String parseClass = itemExtras.getString("PARSE_CLASS"); 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View v, int position, 
           long arg3) { 
      Log.i("AppInfo", parseClass); 

      if (parseClass.equals("Categories")) { 
       Log.i("AppInfo", parseClass); 
       Intent t = new Intent(getApplicationContext(), DisplayGrid.class); 
       String categoryName = categoryNameArrayList.get(position); 

       itemExtras.putString("SUPPLIER", activeSupplier); 
       itemExtras.putString("PARSE_CLASS", "Items"); 
       itemExtras.putString("CATEGORY_NAME", categoryName); 
       t.putExtras(itemExtras); 
       startActivity(t); 
      } else if (parseClass.equals("Items")) { 
       Intent t = new Intent(getApplicationContext(), ItemDisplay.class); 
       //extras.putString("SUPPLIER", activeSupplier); 
       //extras.putString("PARSE_CLASS", "Items"); 
       //t.putExtras(extras); 
       startActivity(t); 
      } 
     } 
    }); 
+0

soru vermek ve aynı etkinlikte kalmak istediğinizde –

+0

ne yapmak istediğinizi örnek ve farklı etkinliğe –

+0

activity1 gitmek istediğinizde (burada gösterilmemiştir) olabilir, biraz kafa karıştırıcı -> DisplayGrid (ızgara görünümünü doldurur) -> kullanıcı bir ızgara öğesini tıklar -> DisplayGrid (2. ızgara görünümünü doldurur) -> kullanıcı 2. gridview ızgara öğesini tıklar -> activity2 – GCQ

cevap

0
public class DisplayGrid extends AppCompatActivity implements AdapterView.OnItemSelectedListener { 

    GridView gridView = null; 
    List<ParseObject> obj; 
    ProgressDialog loadProgress; 
    GridViewAdapter adapter; 
    Bundle extras = new Bundle(); 
    GridViewAdapter itemGridAdapter; 
    private List<ImageList> imageArrayList = null; 
    private List<String> categoryNameArrayList = null; 
    String activeSupplier; 
    String parseClass; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.ws_display_grid); 
     imageArrayList = new ArrayList<ImageList>(); 
     categoryNameArrayList = new ArrayList<String>(); 
     Intent i = getIntent(); 
     if (null != i) { 
      Bundle itemExtras = i.getExtras(); 
      activeSupplier = itemExtras.getString("SUPPLIER"); 
      parseClass = itemExtras.getString("PARSE_CLASS"); 
     } 
     RemoteDataTask remoteDataAsync = new RemoteDataTask(); 
     remoteDataAsync.execute(); 

     if(remoteDataAsync.getStatus() == AsyncTask.Status.PENDING){ 
      // My AsyncTask has not started yet 
     } 

     if(remoteDataAsync.getStatus() == AsyncTask.Status.RUNNING){ 
      // My AsyncTask is currently doing work in doInBackground() 
     } 

     if(remoteDataAsync.getStatus() == AsyncTask.Status.FINISHED){ 
      // My AsyncTask is done and onPostExecute was called 
      gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 


       @Override 
       public void onItemClick(AdapterView<?> arg0, View v, int position, 
             long arg3) { 
        Intent t = new Intent(getApplicationContext(), DisplayGrid.class); 
        extras.putString("SUPPLIER", activeSupplier); 
        extras.putString("PARSE_CLASS", parseClass); 
        t.putExtras(extras); 
        startActivity(t); 

       } 
      }); 
     } 

    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 

    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
    } 


    //RemoteDataTask 
    private class RemoteDataTask extends AsyncTask<Void, Void, Void> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      loadProgress = new ProgressDialog(DisplayGrid.this); 
      loadProgress.setTitle("Images"); 
      loadProgress.setMessage("Loading..."); 
      loadProgress.setIndeterminate(false); 
      loadProgress.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 


      try { 
       Intent i = getIntent(); 
       Bundle extras = i.getExtras(); 

       String parseClass = extras.getString("PARSE_CLASS"); 
       String activeSupplier = extras.getString("SUPPLIER"); 

       String category; 

       ParseQuery<ParseObject> query = new ParseQuery<>(parseClass); 
       query.whereEqualTo("username", activeSupplier); 
       obj = query.find(); 
       if (parseClass == "Items") { 
        category = extras.getString("CATEGORY"); 
        query.whereEqualTo("category", category); 

       } 
       for (ParseObject categories : obj) { 
        //get image 
        ParseFile image = (ParseFile) categories.get("image"); 
        ImageList gridBlock = new ImageList(); 
        gridBlock.setImage(image.getUrl()); 
        imageArrayList.add(gridBlock); 
        Log.i("AppInfo", "image sent to imageArrayList"); 

        String categoryName = null; 
        //get category name 
        if (categoryName == null) { 

        } else { 
         categoryName = categories.getString("categoryName"); 
         categoryNameArrayList.add(categoryName); 
         Log.i("AppInfo", categoryName); 
        } 
       } 
      } catch (ParseException e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 

      adapter = new GridViewAdapter(DisplayGrid.this, imageArrayList); 
      gridView.setAdapter(adapter); 
      loadProgress.dismiss(); 
      Log.i("AppInfo", "CategoryGrid Populated"); 

     }//end onCreate method 
     } 


    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == 1 && resultCode == RESULT_OK && data != null) { 
      Uri selectedImage = data.getData(); 
      try { 
       Bitmap bitmapImage = 
         MediaStore.Images.Media.getBitmap 
           (this.getContentResolver(), selectedImage); 

       ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
       bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, stream); 
       byte[] byteArray = stream.toByteArray(); 

       //convert to parse file 
       ParseFile file = new ParseFile("Img.png", byteArray); 

       ParseObject object = new ParseObject("Categories"); 
       object.put("username", ParseUser.getCurrentUser().getUsername()); 
       object.put("image", file); 

       object.saveInBackground(new SaveCallback() { 
        @Override 
        public void done(ParseException e) { 
         if (e == null) { 
          Toast.makeText(getApplication().getBaseContext(), "Your image has been saved", Toast.LENGTH_SHORT).show(); 
         } else { 
          Toast.makeText(getApplication().getBaseContext(), "Upload failed, please try again", Toast.LENGTH_SHORT).show(); 
         } 
        } 
       }); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       Toast.makeText(getApplication().getBaseContext(), "Upload failed, please try again", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 

    //begin getTitle method 

    //begin createMenu 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     new MenuInflater(getApplication()) 
       .inflate(R.menu.options, menu); 

     return (super.onCreateOptionsMenu(menu)); 
    } 
    //end createMenu 

    //begin onOptionsItemSelected 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 


     if (item.getItemId() == R.id.manufacturers) { 
      Intent i = new Intent(getApplicationContext(), SupplierList.class); 
      startActivity(i); 
      return true; 
     } else if (item.getItemId() == R.id.add) { 
      Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(i, 1); 
      return true; 
     } else if (item.getItemId() == R.id.sign_out) { 
      ParseUser.logOut(); 

      Intent i = new Intent(getApplicationContext(), MainActivity.class); 
      startActivity(i); 
      return true; 
     } 

     return (super.onOptionsItemSelected(item)); 
    } 
    //end onOptionsItemSelected 
} 
+0

Burada ne yaptığınızı açıklar mısınız? – GCQ

+0

gridview onItemClickListner üzerinde yanlış niyet gönderiyorsunuz, Neden öğeleri gönderiyorsunuz, extras.putString ("SUPPLIER", activeSupplier); extras.putString ("PARSE_CLASS", "Öğeler"), burada bulabilirsiniz string parseClass = extras.getString ("PARSE_CLASS"); ve burada parseClass alıyorsunuz ve extras.putString ("PARSE_CLASS", "Öğeler") yazıyorsunuz, ikinci olarak neden bu kimliği iki kez buluyorsunuz gridView = (GridView) findViewById (R.id.gridView); –

+0

** onItemClickListener **, ** "PARSE_CLASS" ** için "Öğeler" i geçiyorum çünkü daha önce ayarlanmış olan "Kategoriler" in üzerine yazmak istiyorum, böylece ** PARSE_CLASS ** 'ı sorgulamak için kullanıyorum Veritabanından farklı bir ayrıştırma sınıfından farklı bir öğeler kümesi. ** "TEDARİKÇİ" ** Aynı kategoriyi ve öğeleri (veritabanındaki her iki ayrı sınıf) öğeyi yükleyen tedarikçiye ait olduğunu bulmak için kullandığımdan beri aynı şeyi tekrar iletmem gerektiğini varsaydım. Ekstra gridView bir hataydı, bunu yakalamak için teşekkürler. – GCQ