2017-01-07 7 views
1

바코드를 스캔하여 결과를 표시하는이 앱을 사용하고 있습니다. 현재 TexView은 바코드를 스캔 한 후에 아무 것도 표시하지 않습니다. 도와주세요.TextView가 표시되지 않음 결과 :

여기 여기 MainActivity.java

public class MainActivity extends AppCompatActivity { 
    private Toolbar toolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_scrollable_tabs); 

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     setupViewPager(viewPager); 

     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFrag(new OneFragment(), "ONE"); 
     adapter.addFrag(new TwoFragment(), "TWO"); 
     adapter.addFrag(new ThreeFragment(), "THREE"); 
     adapter.addFrag(new FourFragment(), "FOUR"); 
     adapter.addFrag(new FiveFragment(), "FIVE"); 
     adapter.addFrag(new SixFragment(), "SIX"); 
     adapter.addFrag(new SevenFragment(), "SEVEN"); 
     adapter.addFrag(new EightFragment(), "EIGHT"); 
     adapter.addFrag(new NineFragment(), "NINE"); 
     adapter.addFrag(new TenFragment(), "TEN"); 
     viewPager.setAdapter(adapter); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 

     public void addFrag(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 

있어

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <Button android:id="@+id/scan_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:text="scan" /> 

    <TextView 
     android:id="@+id/barcodeResult" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Start scanning by pressing the FAB!" 
     android:layout_centerHorizontal="true" /> 
</RelativeLayout> 
+0

textView 디스플레이에서 오류가 발생합니까? –

+0

어쩌면 활동 결과가 조각 대신 활동에 있어야합니까? –

+0

활동 또는 조각 아무 의미도 만들지 말라. 함수는 양쪽 모두와 작동해야한다. –

답변

0

확실히 당신의 ActivityOnActivityResultsuper.OnActivityResult()를 호출되어 있는지 확인 스캐너 코드

public class OneFragment extends Fragment{ 
    public OneFragment() { 
     // Required empty public constructor 
    } 

    Button scan_btn; 
    TextView barcode; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_one, container, false); 
     scan_btn = (Button) view.findViewById(R.id.scan_button); 
     //initialize the textViews 
     barcode = (TextView)view.findViewById(R.id.barcodeResult); 
     final Activity activity = getActivity(); 
     scan_btn.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View view) { 
       IntentIntegrator integrator = new IntentIntegrator(activity); 
       integrator.setDesiredBarcodeFormats(IntentIntegrator.PRODUCT_CODE_TYPES); 
       integrator.setPrompt("Scan"); 
       integrator.setCameraId(0); 
       integrator.setBeepEnabled(false); 
       integrator.setBarcodeImageEnabled(true); 
       integrator.initiateScan(); 
      } 
     }); 

     return view; 
    } 

    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); 
     if (result != null) { 
      barcode.setText(result.getContents()); 
     }else { 
      Toast toast = Toast.makeText(getContext(),"No scan data received!", Toast.LENGTH_SHORT); 
      toast.show(); 
     } 
    } 
} 

그리고 XML 파일입니다. 그것은 Fragment에서도 호출되어야합니다.

또는 ..

이 래퍼 클래스를 시도 : 대신 IntentIntegrator

import android.content.Intent; 
import android.support.v4.app.Fragment; 

import com.google.zxing.integration.android.IntentIntegrator; 

public final class FragmentIntentIntegrator extends IntentIntegrator { 

    private final Fragment fragment; 

    public FragmentIntentIntegrator(Fragment fragment) { 
     super(fragment.getActivity()); 
     this.fragment = fragment; 
    } 

    @Override 
    protected void startActivityForResult(Intent intent, int code) { 
     fragment.startActivityForResult(intent, code); 
    } 
} 

fragmentonactivityresult가 호출되는 것을 보장한다 ..

같은 당신의 OneFragment에 전화;

FragmentIntentIntegrator integrator = new FragmentIntentIntegrator (this); 

또는 ...

볼이 http://androide-examples.blogspot.com/2013/11/zxing-onactivityresult-called-only-in.html

가 다른 활동에서 돌아 오는 때 시스템이 실제로 덮어 쓰기, 뷰 상태를 복원 할 수있는 세부 구현

+0

내가 래퍼를 시도했지만이 super.onactivityresult에 대한 – Jason

+0

일을 didnt가 확인 어떻게 코드에 삽입합니까? 미안 해요 자바와 안드로이드에 대한 새로운 새로운 – Jason

+0

@ 제이슨은 편집을 참조하십시오. – rafsanahmad007

0

을 보여줍니다 무엇을 방금 쓴거야.

멤버로 결과를 저장하고 시도는 지각 fo를

@Override 
    public void onViewStateRestored(Bundle savedInstanceState){ 
    super.onViewStateRestored(savedInstanceState); 
    if(barcode != null){ 
     barcode.setText(mResult); 
    } 
    } 
+0

내 조각 코드에 넣어? 죄송합니다. 이러한 학습에 새로운 샘플을 제공 할 수 있습니다. 최대한 열심히 수행하십시오. – Jason

+0

onActivityResult가 호출되지 않으면 살펴 봐야 할 첫 번째 문제입니다. 내 코드는 단편보기 (textviews)가 이전 값으로 재설정되는 것을 막아 주지만 onActivityResult가 호출되지 않으면 내 코드가 특별한 작업을 수행하지 않습니다. – DrKappa

0

죄송합니다 당신의 조각에 onViewStateRestored 재정의하지만 내가 가진 너무 많은 오류가 업로드를 위해 또한 쉽게, 당신은 프로젝트 컴파일하기 때문이다 그것은 Github에서에서

어쨌든, 당신은 스캐너를 사용하는 방법도 확인

,174에 대한 정의와 함께 모든 그래서 MainActivity class of the sample library 로 다시 만든 onActivityResult() 방법을 입력하지 않습니다여기

은 당신의 코드는, 나는 그것을 테스트 한하고 그것은 확실히 당신이 그냥 바로 스캔 버튼 뒤에 있기 때문에

package info.androidhive.materialtabs.fragments; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.google.zxing.integration.android.IntentIntegrator; 
import com.google.zxing.integration.android.IntentResult; 

import info.androidhive.materialtabs.R; 


public class OneFragment extends Fragment{ 
public OneFragment() { 
    // Required empty public constructor 
} 

private String toast; 
Button scan_btn; 
TextView barcode; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_one, container, false); 
    scan_btn = (Button) view.findViewById(R.id.scan_button); 
    barcode = (TextView)view.findViewById(R.id.barcodeResult); 
    scan_btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      scanFromFragment(); 
     } 
    }); 
    return view; 
} 

public void scanFromFragment() { 
    IntentIntegrator.forSupportFragment(this) 
      .setDesiredBarcodeFormats(IntentIntegrator.PRODUCT_CODE_TYPES) 
      .setPrompt("Scan") 
      .setCameraId(0) 
      .setBeepEnabled(false) 
      .setBarcodeImageEnabled(true) 
      .initiateScan(); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); 
    if(result != null) { 
     if(result.getContents() == null) { 
      toast = "Cancelled from fragment"; 
     } else { 
      barcode.setText(result.getContents()); 
      toast = "Scanned from fragment: " + result.getContents(); 
     } 

     // At this point we may or may not have a reference to the activity 
     displayToast(); 
    } 
} 

private void displayToast() { 
    if(getActivity() != null && toast != null) { 
     Toast.makeText(getActivity(), toast, Toast.LENGTH_LONG).show(); 
     toast = null; 
    } 
} 
} 

또한 당신의 barcodeResultfragment_one의 레이아웃 android:layout_below="@+id/scan_button"에 추가 복사하여 붙여 넣기 할 필요가 작동

+0

@ Jason Stack Overflow에 오신 것을 환영합니다. 여기서 '감사합니다'라고 말하면 가장 좋은 방법은 위의 좋은 질문과 유용한 답변 (충분한 답변을 얻으려면 명을 얻은 것임)이며, 질문에 대한 가장 유용한 답변을 수락하면됩니다. (이는 또한 평판에 대한 귀하의 에 약간의 도움이됩니다). [정보] 페이지 및 [어떻게 질문합니까? ?] (http://stackoverflow.com/help/how-to-ask) –

관련 문제