1

誰でも私の問題を解決できますか.. 2日間の闘争の後、ついに出力の70%を明確に得ました。Exp: サーバーからデータが送られてくるリストビューがあります。リストビュー内には、テキスト、ボタン、スクロール インデックス A、BC、D、E、F、G があります。
問題:ボタンが機能していないということは、ボタンをクリックしたときに意味します...下のコードを追加すると。画像の下にあるものを探しています:

ここでは、この方法で XML を使用しました---> com.woozzu.android.widget.IndexableListView この場合、ボタンのクリックが機能しません スクロール ビュー A、B、C が正しい方法で表示され、正常に動作しています..

ここに画像の説明を入力

ステータス 1:-

homempleb.xml

    <LinearLayout
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:background="#335552"
        android:layout_below="@+id/relativeLayout4" >                       
 <com.woozzu.android.widget.IndexableListView          
            android:id="@+id/homelistView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"               
            android:layout_weight="1.04"
            android:dividerHeight="0dip" />

MainActivity.java

public class MainActivity extends Activity implements
    SearchView.OnQueryTextListener, SearchView.OnCloseListener {


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.homempleb);
    Log.i("scan", " txtScanResult ");

    ActionItem nextItem = new ActionItem();
    final QuickAction quickAction = new QuickAction(this,
            QuickAction.VERTICAL);
    quickAction.addActionItem(nextItem);
    quickAction.setOnDismissListener(new QuickAction.OnDismissListener() {
        @Override
        public void onDismiss() {
            Toast.makeText(getApplicationContext(), "Dismissed",
                    Toast.LENGTH_SHORT).show();
        }
    });



   // listView = (IndexableListView) findViewById(R.id.homelistView);
    listView = (ListView) findViewById(R.id.homelistView);
    listView.setTextFilterEnabled(true);
    listView.setFastScrollEnabled(true);
    listView.setFastScrollAlwaysVisible(true);
    objectAdapter = new EfficientAdapter(this);     
    listView.setAdapter(objectAdapter);

}

EfficientAdapter.java

public class EfficientAdapter extends BaseAdapter implements SectionIndexer {

private String mSections = "#ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ArrayList<Patient> patientListArray;

private LayoutInflater mInflater;
private Context context;
protected ListView mListView;
private int positions;
ViewHolder holder;


public EfficientAdapter(Context context) {
    mInflater = LayoutInflater.from(context);
    this.context = context;

    String patientListJson = CountriesList.jsonData;
    JSONObject jssson;
    try {
        jssson = new JSONObject(patientListJson);
        patientListJson = jssson.getString("PostPatientDetailResult");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    Gson gson = new Gson();
    JsonParser parser = new JsonParser();
    JsonArray Jarray = parser.parse(patientListJson).getAsJsonArray();
    patientListArray = new ArrayList<Patient>();
    for (JsonElement obj : Jarray) {
        Patient patientList = gson.fromJson(obj, Patient.class);
        patientListArray.add(patientList);
        Log.i("patientList", patientListJson);

    }
}

/**
 * sorting the patientListArray data
 */
public void sortMyData() {
    // sorting the patientListArray data
    Collections.sort(patientListArray, new Comparator<Object>() {
        @Override
        public int compare(Object o1, Object o2) {
            Patient p1 = (Patient) o1;
            Patient p2 = (Patient) o2;
            return p1.getName().compareToIgnoreCase(p2.getName());
        }

    });
}

public int getCount() {

    return patientListArray.size();
}

public Object getItem(int position) {

    return position;
}

public long getItemId(int position) {
    return position;
}

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

    this.positions = position;

    if (convertView  == null) {                     
        convertView = mInflater.inflate(R.layout.homemplebrowview, parent,false);
        holder = new ViewHolder();
        holder.text1 = (TextView) convertView.findViewById(R.id.name);
        holder.text2 = (TextView) convertView.findViewById(R.id.mrn);
        holder.text3 = (TextView) convertView.findViewById(R.id.date);
        holder.text4 = (TextView) convertView.findViewById(R.id.age);
        holder.text5 = (TextView) convertView.findViewById(R.id.gender);
        holder.text6 = (TextView) convertView.findViewById(R.id.wardno);
        holder.text7 = (TextView) convertView.findViewById(R.id.roomno);
        holder.text8 = (TextView) convertView.findViewById(R.id.bedno);


        holder.btnList = (Button) convertView.findViewById(R.id.listbutton);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.text1.setText(Util.formatN2H(patientListArray.get(position)
            .getName()));
    holder.text2.setText(patientListArray.get(position).getMrnNumber());
    holder.text3.setText(Util.formatN2H(patientListArray.get(position)
            .getRoom()));
    holder.text4.setText(Util.formatN2H(patientListArray.get(position)
            .getAge()));
    holder.text5.setText(Util.formatN2H(patientListArray.get(position)
            .getGender()));
    holder.text6.setText(Util.formatN2H(patientListArray.get(position)
            .getWard()));
    holder.text7.setText(Util.formatN2H(patientListArray.get(position)
            .getRoom()));
    holder.text8.setText(Util.formatN2H(patientListArray.get(position)
            .getBed()));


    //  holder.btnList.setOnClickListener(new OnClickListener(test));

    holder.btnList.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {                   
            Toast.makeText(context, "STAT", Toast.LENGTH_SHORT).show();
            Intent next = new Intent(context, Home.class);
            Log.i("next23", "next"+ next);
            context.startActivity(next);
        }
    });

    return convertView;
}



      /*OnItemClickListener test = new OnItemClickListener() {
onItemClick(AdapterView<?> parent, View view, int position, long id){
      ((TextView)view.findViewById(R.id.yourTextViewId)).getText();

  {
//    Button btnList=(Button)v.findViewById(R.id.listbutton);

    btnList.setOnClickListener(new OnClickListener(){
    public void onClick(View v) {                   
        Toast.makeText(context, "STAT", Toast.LENGTH_SHORT).show();
        Intent next = new Intent(context, Home.class);
        Log.i("next23", "next"+ next);
        context.startActivity(next);
    }

});
      }

         };
      */


static class ViewHolder {
    public Button btnList;
    public TextView text8;
    public TextView text7;
    public TextView text6;
    public TextView text5;
    public TextView text4;
    public TextView text1;
    public TextView text2;
    public TextView text3;
}

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



       /*public void onItemClick(AdapterView<?> arg0, View v, final int position,
          long arg3)
      {
    holder.btnList=(Button)v.findViewById(R.id.listbutton);

    holder.btnList.setOnClickListener(new OnClickListener(){
    public void onClick(View v) {                   
        Toast.makeText(context, "STAT", Toast.LENGTH_SHORT).show();
        Intent next = new Intent(context, Home.class);
        Log.i("next23", "next"+ next);
        context.startActivity(next);
    }

});
      }
        */



public int getPositionForSection(int section) {
    // sorting the patientListArray data
    sortMyData();
    // If there is no item for current section, previous section will be
    // selected
    for (int i = section; i >= 0; i--) {
        for (int j = 0; j < getCount(); j++) {
            if (i == 0) {
                // For numeric section
                for (int k = 0; k <= 9; k++) {
                    if (StringMatcher.match(
                            String.valueOf(patientListArray.get(j)
                                    .getName().charAt(0)),
                            String.valueOf(k)))
                        return j;
                }
            } else {
                if (StringMatcher.match(
                        String.valueOf(patientListArray.get(j).getName()
                                .charAt(0)),
                        String.valueOf(mSections.charAt(i))))
                    return j;
            }
        }
    }
    return 0;
}

public int getSectionForPosition(int position) {
    return 0;
}

public Object[] getSections() {
    String[] sections = new String[mSections.length()];
    for (int i = 0; i < mSections.length(); i++)
        sections[i] = String.valueOf(mSections.charAt(i));
    return sections;
}

    }

ステータス 2:-

この場合、クリック時のボタンは正常に機能しますが、スクロール ビュー A、B、C も正常に機能しますが、横にはアルファベットの A、B、C、D、E、F、G はありません...リストビューを追加した場合homempleb.xml の場合、両方とも正常に機能しますが、画像に示されているようなアルファベットのインデックスはありません。上の画像のように、ボタンとスクロール インデックスの両方が機能するようにしたいのですが、このトピックは苦手です。このように表示されるのを手伝ってください:

ここに画像の説明を入力

homempleb.xml

<LinearLayout
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:background="#335552"
        android:layout_below="@+id/relativeLayout4" >                      
     <ListView
            android:id="@+id/homelistView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"               
            android:layout_weight="1.04"
            android:dividerHeight="0dip" />

4

1 に答える 1

4

誰かがまだ気にかけている場合:

TouchEvent は、インデックス スクローラーによってキャッチされます。 https://github.com/denley/IndexableListView/commit/18210a54487ba079bb332fafec709e2de26883dbを参照してください。

その数行を変更するだけで、うまくいきます。

編集:好奇心からチェックアウトしました。リンクは死んでいます。最近のバージョンではエラーが解決されていると思います (最近更新された元の IndexableListView プロジェクトをチェックしてください)。何が変更されたのか、何が問題なのかさえわからないので、念のため、私が問題の原因となった可能性のある私の作業機能を次に示します。

IndexedListView.java

@Override
public boolean onTouchEvent(MotionEvent ev) {
    if (mScroller != null && mScroller.onTouchEvent(ev))
        return true;
    try{
    if (mGestureDetector == null) {
        mGestureDetector = new GestureDetector(getContext(),

                new GestureDetector.SimpleOnGestureListener() {
                    @Override
                    public boolean onFling(MotionEvent e1, MotionEvent e2,
                            float velocityX, float velocityY) {
                        if(mScroller!=null){
                        mScroller.show();
                        }
                        return super.onFling(e1, e2, velocityX, velocityY);
                    }

                });

    }
    }catch(Exception e){
        e.printStackTrace();
    }
    mGestureDetector.onTouchEvent(ev);

    return super.onTouchEvent(ev);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    if(mScroller!=null){
    if(mScroller.contains(ev.getX(), ev.getY())){
        return true;
    }

    return super.onInterceptTouchEvent(ev);
    }
    return false;
}

IndexedScroller.java

public boolean onTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
    case MotionEvent.ACTION_DOWN:
        if (mState != STATE_HIDDEN && contains(ev.getX(), ev.getY())) {
            setState(STATE_SHOWN);
            mIsIndexing = true;

            mCurrentSection = getSectionByPoint(ev.getY());

            mListView.setSelection(mIndexer
                    .getPositionForSection(mCurrentSection));
            return true;
        }
        break;
    case MotionEvent.ACTION_MOVE:
        if (mIsIndexing) {

            if (contains(ev.getX(), ev.getY())) {

                mCurrentSection = getSectionByPoint(ev.getY());
                mListView.setSelection(mIndexer
                        .getPositionForSection(mCurrentSection));
            }
            return true;
        }
        break;
    case MotionEvent.ACTION_UP:
        if (mIsIndexing) {
            mIsIndexing = false;
            mCurrentSection = -1;
        }
        if (mState == STATE_SHOWN)
            setState(STATE_HIDING);
        break;
    }
    return false;
}
于 2013-11-14T13:19:20.007 に答える