2015-01-08 2 views
1

У меня есть представление списка, что набор на базовый адаптер, как следующее:Android Изменение цвета текста в базе адаптера

   FQAdapter fa=new FQAdapter(FQActivity2.this, al); 
       lvfq.setAdapter(fa); 
       lvfq.setDivider(null); 

В моей базе адаптера файл инфлятор XML имеют два поля, текст и изображения: я хочу, когда я нажмите на изображение в то время независимо от текста с этим, текст изменить их цвет, как следующее:

 @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi = convertView;    //trying to reuse a recycled view 
     ViewHolder holder = null; 
     if (vi == null) 
     { 
      holder=new ViewHolder(); 
      LayoutInflater lif=(LayoutInflater) ctx.getSystemService (ctx.LAYOUT_INFLATER_SERVICE) ; 
      vi=lif.inflate(R.layout.item_fq, null); 
      holder.tvMsg=(TextView) vi.findViewById(R.id.tv_item_username); 
      holder.ivMinuse=(ImageView) vi.findViewById(R.id.iv_item_un_minuse); 
      vi.setTag(holder); 
     } 
     else 
     { 
      holder=(ViewHolder)vi.getTag(); 
     } 
     final FAQ jou=al.get(position); 

     holder.tvMsg.setText(jou.getFqTitle()); 
     holder.ivMinuse.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       // here i want to set text color whatever image click 
       // like holder.setivMsg.setTextColor(Color.BLUE); but it effect on only last text of list 
       new GetAns().execute("url"+jou.getFqId()); 
       //Log.v("dssfs", jou.getFqAns()); 
      } 
     }); 

     //date.roll(Calendar.DAY_OF_YEAR, true); 

     return vi ; 
    } 

, как я пишу на коде комментария я хочу, чтобы изменить цвет текста holder.tvMsg в perticular положении, когда нажмите на holder.ivMinuse образ;

Пожалуйста, помогите мне сделать это

Edit: весь мой Java файл:

 public class FQActivity extends Activity{ 
ImageView ivChcklistUnsel; 
ImageView ivJourUnsel; 
ImageView ivResourUnsel; 
ImageView ivRecipUnsel; 
ImageView ivSettingUnsel; 
ImageView ivFaqUnsel; 

ImageView ivChcklistsel; 
ImageView ivJoursel; 
ImageView ivResoursel; 
ImageView ivRecipsel; 
ImageView ivSettingsel; 
ImageView ivFaqsel; 

ListView lvfq; 
ArrayList<FAQ> al; 
TextView tvAns; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fq_layout); 
    initImageview(); 
    tvAns=(TextView) findViewById(R.id.tv_ans); 
    tvAns.setMovementMethod(new ScrollingMovementMethod()); 
    lvfq=(ListView) findViewById(R.id.lv_fqlistview); 
    new GetJournal().execute(Appconstants.SERVICE_URL1+"faq/getFaqData"); 
} 
public class GetJournal extends AsyncTask<String, Void, String> 
{ 
    ProgressDialog pd; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pd=new ProgressDialog(FQActivity.this); 
     pd.setMessage(Html.fromHtml("<b>Please Wait</b><br/>loading...")); 
     pd.setIndeterminate(false); 
     pd.setCancelable(false); 
     pd.show(); 
    } 
    @Override 
    protected String doInBackground(String... params) { 
     return new DownloadAdapter(FQActivity.this).getJSONData(params[0]); 
    } 
    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     pd.cancel(); 
     try 
     { 
      JSONObject obj=new JSONObject(result); 
      Log.v("dd", result); 
      if(obj.getString("status").equals("success")) 
      { 
       JSONArray arr=obj.getJSONArray("response"); 
       al=new ArrayList<FAQ>(); 
       FAQ fq; 
       for(int i=0;i<arr.length();i++) 
       { 
        obj=arr.getJSONObject(i); 
        fq=new FAQ(); 
        Log.v("dd", obj.getString("faq_title")); 
        fq.setFqId(obj.getString("faq_id")); 
        fq.setFqTitle(obj.getString("faq_title")); 
        //fq.setFqQue(obj.getString("faq_qus")); 
        //fq.setFqAns(obj.getString("faq_ans")); 
        al.add(fq); 
       } 

       FQAdapter fa=new FQAdapter(FQActivity.this, al); 
       lvfq.setAdapter(fa); 
       lvfq.setDivider(null); 
      } 
      else 
      { 
       Toast.makeText(getApplicationContext(), obj.getString("response"), Toast.LENGTH_SHORT).show(); 
      } 
     } 
     catch (JSONException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 
public class GetAns extends AsyncTask<String, Void, String> 
{ 
    ProgressDialog pd; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pd=new ProgressDialog(FQActivity.this); 
     pd.setMessage(Html.fromHtml("<b>Please Wait</b><br/>loading...")); 
     pd.setIndeterminate(false); 
     pd.setCancelable(false); 
     pd.show(); 
    } 
    @Override 
    protected String doInBackground(String... params) { 
     return new DownloadAdapter(FQActivity.this).getJSONData(params[0]); 
    } 
    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     pd.cancel(); 
     try 
     { 
      JSONObject obj=new JSONObject(result); 
      Log.v("dd", result); 
      if(obj.getString("status").equals("success")) 
      { 
       JSONArray arr=obj.getJSONArray("response"); 

        obj=arr.getJSONObject(0); 
        tvAns.setText(obj.getString("faq_ans")); 

      } 
      else 
      { 
       Toast.makeText(getApplicationContext(), obj.getString("response"), Toast.LENGTH_SHORT).show(); 
      } 
     } 
     catch (JSONException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 
private void initImageview() 
{ 
    ivChcklistsel= (ImageView) findViewById(R.id.iv_checklist_sel); 
    ivChcklistsel.setVisibility(View.GONE); 
    ivJoursel= (ImageView) findViewById(R.id.iv_jour_sel); 
    ivResoursel= (ImageView) findViewById(R.id.iv_resour_sel); 
    ivRecipsel= (ImageView) findViewById(R.id.iv_recipes_sel); 
    ivFaqsel= (ImageView) findViewById(R.id.iv_faq_sel); 
    ivFaqsel.setVisibility(View.VISIBLE); 
    ivSettingsel= (ImageView) findViewById(R.id.iv_setting_sel); 

    ivChcklistUnsel= (ImageView) findViewById(R.id.iv_checklist_unsel); 
    ivChcklistUnsel.setVisibility(View.VISIBLE); 
    ivJourUnsel= (ImageView) findViewById(R.id.iv_jour_unsel); 
    ivResourUnsel= (ImageView) findViewById(R.id.iv_resour_unsel); 
    ivRecipUnsel= (ImageView) findViewById(R.id.iv_recipes_unsel); 
    ivFaqUnsel= (ImageView) findViewById(R.id.iv_faq_unsel); 
    ivFaqUnsel.setVisibility(View.GONE); 
    ivSettingUnsel= (ImageView) findViewById(R.id.iv_setting_unsel); 

    ivChcklistUnsel.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //startActivity(new Intent(getApplicationContext(), DailyCheckListActivity.class)); 
      finish(); 
     } 
    }); 
    ivResourUnsel.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(getApplicationContext(), ResourceActivity.class)); 
      finish(); 
     } 
    }); 
    ivRecipUnsel.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(getApplicationContext(), RecipesActivity.class)); 
      finish(); 
     } 
    }); 
    ivJourUnsel.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(getApplicationContext(), DailyJournalActivity.class)); 
      finish(); 
     } 
    }); 
    ivSettingUnsel.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(getApplicationContext(), AppSettingActivity.class)); 
      finish(); 
     } 
    }); 
} 

public class FQAdapter extends BaseAdapter{ 

    Context ctx; 
    ArrayList<FAQ> al; 

    int i1=0; 
    public FQAdapter(Context cxt,ArrayList<FAQ> al) 
    { 
     this.ctx=cxt; 
     this.al=al; 
    } 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return al.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi = convertView;    //trying to reuse a recycled view 
     ViewHolder holder = null; 
     if (vi == null) 
     { 
      holder=new ViewHolder(); 
      LayoutInflater lif=(LayoutInflater) ctx.getSystemService (ctx.LAYOUT_INFLATER_SERVICE) ; 
      vi=lif.inflate(R.layout.item_fq, null); 
      holder.tvMsg=(TextView) vi.findViewById(R.id.tv_item_username); 
      holder.ivMinuse=(ImageView) vi.findViewById(R.id.iv_item_un_minuse); 
      vi.setTag(holder); 
     } 
     else 
     { 
      holder=(ViewHolder)vi.getTag(); 
     } 
     final FAQ jou=al.get(position); 

     holder.tvMsg.setText(jou.getFqTitle()); 
     holder.ivMinuse.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       // i try here all your answeres code but not working 
       new GetAns().execute("url"+jou.getFqId()); 
       //Log.v("dssfs", jou.getFqAns()); 
      } 
     }); 

     //date.roll(Calendar.DAY_OF_YEAR, true); 

     return vi ; 
    } 
    class ViewHolder{ 
     TextView tvMsg; 
     ImageView ivMinuse; 
    } 
} 
@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    //super.onBackPressed(); 
} 

}

holder.tvMsg дают ошибку, чтобы создать окончательный поэтому я также попробовать с глобальным декларации. ничего не работает для меня clcik и изменение цвет .. все работа на последнем изображении текст ot изображение.

+0

Вам нужно следить за положение Clicked элемента. Затем получите представление по положению и задайте цвет текста. –

+0

http://stackoverflow.com/questions/22352658/android-how-can-i-change-a-listview-text-color-on-click –

ответ

0
if (convertView == null) { 
     holder= new ViewHolder(); 
     convertView = inflater.inflate(R.layout.your_row_xml, null); 
    holder.ivMinuse= convertView.findViewbyId(R.id.YourImageId); 
     holder.tvMsg= convertView.findViewbyId(R.id.YourTextId); 
    convertView.setTag(ViewHolder); 
     } else { 

    holder= (ViewHolder) convertView.getTag(); 
    } 
     holder.ivMinuse.settag(position); 
     holder.ivMinuse.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 

       if(Integer.ParseInt(v.getTag.toString)==position) 
       { 
        holder.tvMsg.setTextColor(YOUR_COLOR_HERE); 
       } 

      new GetAns().execute("url"+jou.getFqId()); 
      //Log.v("dssfs", jou.getFqAns()); 
     } 
    }); 

, но лучше, чтобы написать щелчок listenr из стороны зрения ПОЛУЧИТЬ

  class ViewHolder { 
       TextView tvMsg; 
       ImageView ivMinuse; 
      } 
+0

позиция и тег, которые получают право но это влияет только на последний текст, а не на промежуток между –

+0

. Я отредактировал ответ. Следуйте концепции представления владельца в адаптере. Вы обязательно получите решение. Просто следуйте выше, как и верните convertView, как 'return convertView;' –

0

Вы можете достичь этого двумя способами:

1. Отслеживайте щелкнули пункта

Integer clickPosition =-1; 

public View getView(final int position, View convertView, ViewGroup parent) { 
     if(clickPosition == position) 
     { 
      holder.setivMsg.setTextColor(Color.BLUE); 
     } 
     else{ 
      // default color 
      holder.setivMsg.setTextColor(Color.BLACK); 
     } 

     holder.ivMinuse.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      // set the position 
      clickPosition = position; 

      new GetAns().execute("url"+jou.getFqId()); 
      //Log.v("dssfs", jou.getFqAns()); 
     } 
    }); 
    } 

2. Установить положение в качестве тега в TextView

public View getView(final int position, View convertView, ViewGroup parent) { 

     // Set Tag 
     holder.setivMsg.setTag(position); 

     holder.ivMinuse.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       TextView txtListItem =(TextView) v.findViewById(R.id.yourTextViewID); 
       // get Tag 
       if (position == (Integer)txtListItem.getTag()) 
       { 
        holder.setivMsg.setTextColor(Color.BLUE); 
       } 
       else{ 
        // default color 
        holder.setivMsg.setTextColor(Color.BLACK); 
       } 
      } 
     }); 
    } 

Надеется, что это помогает ツ

+0

Helloe @SweetWisher я отправляю весь свой java-файл, если у вас есть какая-либо ошибка, я не знаю, почему для меня ничего не работает ... –

+0

Я не могу найти код для изменения textColor –

0

изменить код так,

private int mSelectedPos = -1; 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi = convertView;    //trying to reuse a recycled view 
     ViewHolder holder = null; 
     if (vi == null) 
     { 
      holder=new ViewHolder(); 
      LayoutInflater lif=(LayoutInflater) ctx.getSystemService (ctx.LAYOUT_INFLATER_SERVICE) ; 
      vi=lif.inflate(R.layout.item_fq, null); 
      holder.tvMsg=(TextView) vi.findViewById(R.id.tv_item_username); 
      holder.ivMinuse=(ImageView) vi.findViewById(R.id.iv_item_un_minuse); 
      vi.setTag(holder); 
     } 
     else 
     { 
      holder=(ViewHolder)vi.getTag(); 
     } 
     final FAQ jou=al.get(position); 
     if(mSelectedPos == position){ 
      holder.tvMsg.setColor(Color.RED); 
     }else{ 
      holder.tvMsg.setColor(yourDefaultColor); 
     } 
     holder.ivMinuse.setTag(position); 
     holder.tvMsg.setText(jou.getFqTitle()); 
     holder.ivMinuse.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       mSelectedPos = (Integer) v.getTag(); 
       new GetAns().execute("url"+jou.getFqId()); 
       notifyDataSetChanged(); 
      } 
     }); 

     //date.roll(Calendar.DAY_OF_YEAR, true); 

     return vi ; 
    } 
Смежные вопросы