2016-12-26 4 views
3

Я создаю две кнопки с текстом, где, если я нажимаю кнопку «плюс», текст должен увеличиваться, и если я уменьшу наоборот. Теперь я сделал одно действие, когда при нажатии на элемент списка открывается один диалог, и у него есть флажок, кнопка, счетчик и т. Д. Я попытался добавить код в поле предупреждения и мои кнопки. Но это не работает нормально, если я нажимаю плюс кнопка его подачи последнего предела, 45 становится 46, и если я нажимаю кнопку уменьшения это только уменьшает один раз ..Как увеличить или уменьшить количество текстовых просмотров с помощью кнопки в android

Вот мой SubMenu активность:

public class SubMenu extends AppCompatActivity { 

    JSONObject jsonobject; 
    JSONArray jsonarray; 
    ListView listview; 
    ListViewAdapter adapter; 
    ProgressDialog mProgressDialog; 
    ArrayList<HashMap<String, String>> arraylist; 
    static String RANK = "id"; 
    static String COUNTRY = "name"; 

    static String FLAG = "image"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     setContentView(R.layout.activity_sub_menu); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     String SelectedId = getIntent().getStringExtra("id"); 


     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 






     // Get the view from listview_main.xml 

     // Execute DownloadJSON AsyncTask 
     new DownloadJSON().execute(); 
    } 

    // DownloadJSON AsyncTask 
    private class DownloadJSON extends AsyncTask<Void, Void, Void> implements AdapterView.OnItemClickListener { 

     // @Override 
     // protected void onPreExecute() { 
     // super.onPreExecute(); 
     // Create a progressdialog 
     // mProgressDialog = new ProgressDialog(SubMenu.this); 
     // Set progressdialog title 
     // mProgressDialog.setTitle("Categories of Main categories....."); 
     // Set progressdialog message 
     // mProgressDialog.setMessage("Loading..."); 
     // mProgressDialog.setIndeterminate(false); 
     // Show progressdialog 
     // mProgressDialog.show(); 
     // } 

     @Override 
     protected Void doInBackground(Void... params) { 
      // Create an array 
      arraylist = new ArrayList<HashMap<String, String>>(); 
      // Retrieve JSON Objects from the given URL address 
      jsonarray = JsonFunctions 
        .getJSONfromURL("http://cloud.......com/broccoli/menu_typeitem.php?id=" + getIntent().getStringExtra("id")); 
      try { 
       // Locate the array name in JSON 
//     jsonarray = jsonobject.getJSONArray("main_menu_items"); 


       for (int i = 0; i < jsonarray.length(); i++) { 
        HashMap<String, String> map = new HashMap<String, String>(); 

        jsonobject = jsonarray.getJSONObject(i); 
        // Retrive JSON Objects 
        // map.put("id", jsonobject.getString("id")); 
        map.put("name", jsonobject.getString("name")); 

        map.put("image", jsonobject.getString("image")); 
        // Set the JSON Objects into the array 
        arraylist.add(map); 
       } 
      } catch (JSONException e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void args) { 
      // Locate the listview in listview_main.xml 
      listview = (ListView) findViewById(R.id.list1); 
      // Pass the results into ListViewAdapter.java 
      adapter = new ListViewAdapter(SubMenu.this, arraylist); 
      // Set the adapter to the ListView 
      listview.setAdapter(adapter); 
      listview.setOnItemClickListener(this); 
      // Close the progressdialog 
      // mProgressDialog.dismiss(); 
     } 



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





      final AlertDialog customDialog = new AlertDialog.Builder(SubMenu.this).create(); 
      final LayoutInflater inflater = getLayoutInflater(); 
      final View dialogView = inflater.inflate(R.layout.popup 
        , null); 
      customDialog.setView(dialogView); 
      // set the custom customDialogimation components - text, image and button 
      final TextView tvDistance = (TextView) dialogView.findViewById(R.id.h2); 

      final Button ok=(Button)dialogView.findViewById(R.id.ok) ; 
      ok.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        customDialog.dismiss(); 


       } 
      }); 





      final Button cncl=(Button)dialogView.findViewById(R.id.canc) ; 
      cncl.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        customDialog.dismiss(); 


       } 
      }); 


     Button _decrease = (Button) dialogView.findViewById(R.id.incr); 
      Button _increase = (Button) dialogView.findViewById(R.id.decr); 
      final TextView _value = (TextView) dialogView.findViewById(R.id.value); 




    _decrease.setOnClickListener(new View.OnClickListener() { 

      int currentID = (int) System.currentTimeMillis(); 
      int lastID; 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       removeLastTextView(); 
       lastID--; 
      } 
     }); 

     _increase.setOnClickListener(new View.OnClickListener() { 

      int currentID = (int) System.currentTimeMillis(); 
      int lastID; 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       addNewTextView(); 
       lastID = currentID; 
       currentID++; 
      } 
     }); 
    } 
} 



    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case android.R.id.home: 
       onBackPressed(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 
} 

здесь есть образ, где я хочу, чтобы сделать вертушку как это: я хочу хочу, чтобы эти изображения на блесны enter image description here

+0

Есть ли какое-либо значение по умолчанию, которое должно быть отображено на упомянутом TextView в первый раз? –

+0

Вы инициализировали значение onClick(). int _counter = 45, поэтому вы столкнулись с этой ошибкой – Noorul

+0

Нет, я не упоминал о каких-либо значениях по умолчанию. –

ответ

2

Заменить для Кодекса с этим:

public class SubMenu extends AppCompatActivity { 

    JSONObject jsonobject; 
    JSONArray jsonarray; 
    ListView listview; 
    ListViewAdapter adapter; 
    ProgressDialog mProgressDialog; 
    ArrayList<HashMap<String, String>> arraylist; 
    static String RANK = "id"; 
    static String COUNTRY = "name"; 

    static String FLAG = "image"; 
    Integer i = 1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     setContentView(R.layout.activity_sub_menu); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     String SelectedId = getIntent().getStringExtra("id"); 


     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 


     // Get the view from listview_main.xml 

     // Execute DownloadJSON AsyncTask 
     new DownloadJSON().execute(); 
    } 

    // DownloadJSON AsyncTask 
    private class DownloadJSON extends AsyncTask<Void, Void, Void> implements AdapterView.OnItemClickListener { 

     // @Override 
     // protected void onPreExecute() { 
     // super.onPreExecute(); 
     // Create a progressdialog 
     // mProgressDialog = new ProgressDialog(SubMenu.this); 
     // Set progressdialog title 
     // mProgressDialog.setTitle("Categories of Main categories....."); 
     // Set progressdialog message 
     // mProgressDialog.setMessage("Loading..."); 
     // mProgressDialog.setIndeterminate(false); 
     // Show progressdialog 
     // mProgressDialog.show(); 
     // } 

     @Override 
     protected Void doInBackground(Void... params) { 
      // Create an array 
      arraylist = new ArrayList<HashMap<String, String>>(); 
      // Retrieve JSON Objects from the given URL address 
      jsonarray = JsonFunctions 
        .getJSONfromURL("http://cloud.......com/broccoli/menu_typeitem.php?id=" + getIntent().getStringExtra("id")); 
      try { 
       // Locate the array name in JSON 
//     jsonarray = jsonobject.getJSONArray("main_menu_items"); 


       for (int i = 0; i < jsonarray.length(); i++) { 
        HashMap<String, String> map = new HashMap<String, String>(); 

        jsonobject = jsonarray.getJSONObject(i); 
        // Retrive JSON Objects 
        // map.put("id", jsonobject.getString("id")); 
        map.put("name", jsonobject.getString("name")); 

        map.put("image", jsonobject.getString("image")); 
        // Set the JSON Objects into the array 
        arraylist.add(map); 
       } 
      } catch (JSONException e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void args) { 
      // Locate the listview in listview_main.xml 
      listview = (ListView) findViewById(R.id.list1); 
      // Pass the results into ListViewAdapter.java 
      adapter = new ListViewAdapter(SubMenu.this, arraylist); 
      // Set the adapter to the ListView 
      listview.setAdapter(adapter); 
      listview.setOnItemClickListener(this); 
      // Close the progressdialog 
      // mProgressDialog.dismiss(); 
     } 


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


      final AlertDialog customDialog = new AlertDialog.Builder(SubMenu.this).create(); 
      final LayoutInflater inflater = getLayoutInflater(); 
      final View dialogView = inflater.inflate(R.layout.popup 
        , null); 
      customDialog.setView(dialogView); 
      // set the custom customDialogimation components - text, image and button 
      final TextView tvDistance = (TextView) dialogView.findViewById(R.id.h2); 

      final Button ok = (Button) dialogView.findViewById(R.id.ok); 
      ok.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        customDialog.dismiss(); 


       } 
      }); 


      final Button cncl = (Button) dialogView.findViewById(R.id.canc); 
      cncl.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        customDialog.dismiss(); 


       } 
      }); 


      Button _decrease = (Button) dialogView.findViewById(R.id.incr); 
      Button _increase = (Button) dialogView.findViewById(R.id.decr); 
      final TextView _value = (TextView) dialogView.findViewById(R.id.value); 
      i = Integer.parseInt(_value.getText().toString()); 


      _decrease.setOnClickListener(new View.OnClickListener() { 


      public void onClick(View v) { 
       String _stringVal; 
       Log.d("src", "Decreasing value..."); 
       if (i > 0) { 
        i = i - 1; 
        _stringVal = String.valueOf(i); 
        _value.setText(_stringVal); 
       } else { 
        Log.d("src", "Value can't be less than 0"); 
       } 

      } 
     }); 

      _increase.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        String _stringVal; 

        Log.d("src", "Increasing value..."); 
        i = i + 1; 
        _stringVal = String.valueOf(i); 
        _value.setText(_stringVal); 
       } 
      }); 
      customDialog.show(); 
     } 


    } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case android.R.id.home: 
       onBackPressed(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 
} 
+0

yess..ur champ ... но одно, что он не будет меньше, чем 0 или -1 и так далее. –

+0

как бы я decrese не должен быть меньше 0 –

+0

в порядке. Позвольте мне попытаться решить эту проблему. Дайте мне немного времени. –

1

Создать массив (не обязательно ограниченный) из идентификаторов, так что вы можете позже найти TextViews ,

можно сделать следующим образом

final int currentID = (int)System.currentTimeMillis(); 
final int lastID ; 

plusButton.setOnClickListener(new OnClickListener(){ 
@Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      addNewTextView() ; 
      lastID = currentID ; 
      currentID++ ; 
     } 
} 

minusButton.setOnClickListener(new OnClickListener(){ 
@Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      removeLastTextView() ; 
      lastID-- ; 
     } 
} 

Вы можете взять справку о том, как создать новый TextView для addNewTextView() из here В растворе можно изменить строку, которая устанавливает Id по

textView.setId(currentID); 

А для снятия Просмотры для removeLastTextView() вы можете зайти на помощь от here.

+0

im пытается ур кода, но получает ошибку ,, plz см. мой отредактированный вопрос –

+0

, пожалуйста, попробуйте currentID или lastID как вне методов 'onClickListener', так и кнопки не могут отслеживать идентификаторы. –

+0

thx fr help .... i gt решение, которое @sneha дало –